分类:SQL First1Last
预览模式:摘要 | 列表

10-05

24

SQL语句实现行转列,列转行

发布:水寒冰

在做报表时,经常需要将数据表中的行转列,或者列转行,如果不知道方法,你会觉得通过SQL语句来实现非常难。这里,我将使用pivotunpivot来实现看似复杂的功能。


引用MSDN
可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值,但是在实际应用中,有些聚合之后的数据很难进行拆分。所以呢,unpivot并非pivot的逆过程。

pivot 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。

使用SELECT...CASE语句进行行转列的方法见:解析SQL Server中行转列问题

查看更多...

分类:SQL | 固定链接 | 评论:1 | 查看次数:377

10-03

27

sql server 日期函数datetime应用

发布:水寒冰

Sql Server中的日期与时间函数


SQL中的时间函数非常有用,特别是在我们进行初始赋值、复杂查询的时候,就显得特别方便。


1、获得系统当前时间


select getdate()

2、DateName ( datepart , date )返回表示指定日期的指定日期部分的字符串。


--今天是2009-2-24--星期二

SELECT DATENAME(year, getdate()) AS 'Year Name' --------返回:2009

SELECT DATENAME(month, getdate()) AS 'Month Name' --------返回:02

SELECT DATENAME(weekday, getdate()) AS 'Weekday Name'------返回:星期二



3、DATEADD (datepart , number, date ),在向指定日期加上一段时间的基础上,返回新的 datetime 值。


select DateAdd(MM,2,'2008-8-8') --------------返回:2008-10-08 00:00:00.000

select DateAdd(dd,2,'2008-8-8') --------------返回:2008-08-10 00:00:00.000

select dateadd(hh,-1,getdate()) --------------返回:2009-02-23 12:46:46.450,返回前一个小时的时间

4、DATEDIFF ( date-part, date-expression-1, date-expression-2 ) 返回两个日期之间的间隔。


  此函数计算两个指定日期之间日期部分的数目。结果为日期部分中等于(date2 - date1)的有符号的整数值。





SELECT datediff( hour, '4:00AM', '5:50AM' )---------------------------返回: 1

SELECT datediff( month, '1987/05/02', '1995/11/15' )------------------返回: 102

SELECT datediff( day, '00:00', '23:59' )------------------------------返回:0

SELECT datediff( day, '1999/07/19 00:00', '1999/07/23 23:59' )------返回:4

SELECT datediff( month, '1999/07/19', '1999/07/23' )------------------返回:0

SELECT datediff( month, '1999/07/19', '1999/08/23' )------------------返回:1

实例:查询当天更新的数据


select * from tableName where datediff(dd,F_EditTime,getdate())=0

5、DATEPART ( datepart ,date )返回代表指定日期的指定日期部分的整数。


--今天是2009-2-24 星期二
SELECT DATEPART(year,getdate()) as 'Year' --------返回:2009

SELECT DATEPART(month,getdate()) as 'Month' ---------返回:2

SELECT DATEPART(weekday,getdate()) as 'Weekday' ---------返回:3,如:Sunday = 1、Saturday = 7

SELECT DAY(getdate()) -----------------------返回:24

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:356

10-02

07

case when then 中判断null的方法

发布:水寒冰

Sql Server 中使用case when then 判断某字段是否为null,和判断是否为字符或数字时的写法不一样,如果不注意,很容易搞错

错误方法:

CASE columnName WHEN null THEN 0 ELSE columnName END

查看更多...

分类:SQL | 固定链接 | 评论:1 | 查看次数:357

09-08

27

MSSQL返回刚插入记录的ID

发布:水寒冰

SQL Server中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。

@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。

SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:667

09-04

28

少用且有用的SQL语句

发布:水寒冰

1.waitfor

--例 等待1 小时2 分零3 秒后才执行SELECT 语句

waitfor delay '01:02:03'
select * from employee

--例 等到晚上11 点零8 分后才执行SELECT 语句

waitfor time '23:08:00'
select * from employee

查看更多...

分类:SQL | 固定链接 | 评论:1 | 查看次数:599

09-04

15

解析SQL Server中行转列问题

发布:慧晓

本文将向大家介绍 SQL Server 中行转列问题的终极解决方案,主要应用case语句来解决行转列的问题,下面就一起来看看。



  行转列问题主要分为两类。


  1)简单的行转列问题

查看更多...

分类:SQL | 固定链接 | 评论:1 | 查看次数:669

09-01

06

获取汉字首字母(T-SQL函数)

发布:水寒冰

一个获得汉字字符串的首字母的T-SQL函数, 可用于拼音索引,代码如下:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

--创建取拼音函数 添加到标量值函数中,以后可以直接调用此函数

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:697

09-01

03

重置标识的基数

发布:水寒冰

在创建表时,经常将主健ID设为自动增量,如果插入了三条数据,那么ID分别是1,2,3,将这三条数据删除之后,再次插入三条数据,此时它们的ID分别是4,5,6;

  往往我们在测试一段代码时,插入了10000条的记录,测试完后删除测试的记录,新的数据ID将从10001开始,如果我们想要将标识的基数恢复到从1开始,必须修改表,先取消字段的标识,然后再加上去,OK;表一但多了,改起来真是太痛苦了。

  偶然的机会,在MSDN上看到一种非常简单的方法,只要一句SQL就可以重置标识的基数,而且标识种子可以自已定义:

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:711

08-12

31

经典SQL语句收藏

发布:水寒冰

以下是我平时在工作中收藏的一些觉得有用的SQL语句,共大家使用

1.一句SQL语句获得当月天数:
select Day(dateadd(day,-1,convert(datetime,convert(char(07),dateadd(m,1,getdate()),120)+ '-01 ')))
select 32-Day(getdate()+(32-Day(getdate())))


2.说明:选择从10到15的记录:
select top 5 * from (select top 15 * from tableName order by id asc) table_别名 order by id desc


3.返回库中用户表:
select * from sysobjects where xtype='U'

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:650

08-12

08

按汉字首字母排序(sql语句)

发布:水寒冰

在sql server中可以直接通过SQL语句实现按汉字首字母排序,比如我们经常用到的"按姓名首字母排序"

--把tableName和colName换成自己的就ok了
--按拼音

ALTER TABLE tableName
ALTER COLUMN colName nvarchar(100) COLLATE Chinese_PRC_CI_AS
select *from tableName order by colName

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:1181

08-09

30

Access用SQL获取随机记录

发布:水寒冰

用一条SQL得到Access数据库中的随机记录集!

针对“用一条SQL得到数据库中的随机记录集”问题在网上已经有很多答案了:


-----
SQL Server
2005:
SELECT TOP n * FROM tanblename ORDER BY NEWID()
Access
SELECT TOP n * FROM tanblename ORDER BY rnd([一个自动编号字段])
但就这样获取Access中的随机记录是不行地!就说说这个Access的!

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:881

08-08

16

sql存储过程加密

发布:水寒冰

对SQL存储过程加密,加密后将无法查看此存储过程的内容。
建议使用前先备份。

将此存储过程生成SQL脚本导出,也无法查看里面的内容.

/****** Encrypted object is not transferable, and script can not be generated. ******/

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:952

08-08

02

错误15023:当前数据库中已存在用户或角色

发布:水寒冰

首先介绍一下sql server中“登录”与“用户”的区别,“登录”用于用户身份验证,而数据库“用

户”帐户用于数据库访问和权限验证。登录通过安全识别符 (SID) 与用户关联。将数据库恢复到其他服务

器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。

这种情况被称为存在“孤立用户”。

查看更多...

分类:SQL | 固定链接 | 评论:0 | 查看次数:947
First1Last
Advertise
Category
Time Counter

离十一还有

Recent Article
Statistics
Recent Comments
Archive
Links
Support
《良机》 鲜果阅读器订阅图标
 
TOP