以下是一些以前用过的SQL ,总也记不住,就写下来了,有几个很好用,分享一下:
1.取年
SELECT CreateDate,CAST(YEAR(CreateDate) AS VARCHAR(4)) + '-' +
CAST(MONTH(CreateDate) AS VARCHAR(2)) + '-' +
CAST(DAY(CreateDate) AS VARCHAR(2)) + char(13)+char(10) + DATEPART(HH,CreateDate) FROM s_log
结果:2006-06-01
SELECT CAST(DATEPART(HH,CreateDate)AS VARCHAR(4)) + ':'
+ CAST(DATEPART(MI,CreateDate)AS VARCHAR(4))+':'
+ CAST(DATEPART(SS,CreateDate)AS VARCHAR(4)) FROM s_log
2. 取8位时间 16:30:28
SELECT CreateDate, CONVERT(VARCHAR(8),CreateDate,108)
FROM s_log
3.取10位年月日 2006-10-01
SELECT CreateDate, CONVERT(VARCHAR(10),CreateDate,126)
FROM s_log
当前时间 getdate()
4.回车换行
char(13)+char(10)
5. cast用法
CAST(YEAR(P.Birthday) AS VARCHAR(4)) + '-' +
CAST(MONTH(P.Birthday) AS VARCHAR(2)) + '-' +
CAST(DAY(P.Birthday) AS VARCHAR(2)) as 出生日期
6.case 语句
CASE C5.Des WHEN '初领' THEN '√'
END AS [初领],
CASE C5.Des WHEN '补证' THEN '√'
ELSE '' END AS [补证],
[K1]=
CASE
WHEN P_RegistPractitioner.TitleCardType LIKE '%K1%' THEN '√'
END,
[K2]=
CASE
WHEN P_RegistPractitioner.TitleCardType LIKE '%K2%' THEN '√'
END
7. 联接
分类:内联接 ,外联接,交叉联接
1.内联接: 典型的联接运算,使用像 = 或 <> 之类的比较运算符,包括相等联接和自然联接。
2.外联接: 外联接可以是左向外联接、右向外联接或完整外部联接。
假设在 city 列上联接 authors 表和 publishers 表。
结果只显示在出版商所在城市居住的作者
2.1.左向外联接 :在结果中包括所有的作者,而不管出版商是否住在同一个城市
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a LEFT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC
2.2.右向外联接 :结果中包括所有的出版商,而不管城市中是否还有出版商居住
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors AS a RIGHT OUTER JOIN publishers AS p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC
2.3.完整外部联接: 在结果中包括所有作者和出版商,而不管城市中是否有出版商或者出版商
是否住在同一个城市
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a FULL OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC
3.交叉联接 :返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
例如,下面的内联接检索与某个出版商居住在相同州和城市的作者:
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
AND a.state = p.state
ORDER BY a.au_lname ASC, a.au_fname ASC
8.查询时修改字段类型
cast(moneydate as varchar) as '贷款日期'
9. 值为空时返回0
COALESCE(CargoNum,0)
10. NULLIF
如果两个指定的表达式相等,则返回空值。
11. UPDATE FROM
UPDATE T_StoreInfo
SET PositionName = A.PositionName
FROM T_StoreInfo T,
(SELECT HouseID+'-'+PlaceID+'-'+PositionID AS PositionName,StorageID FROM T_Storage) A
WHERE T.StorageID = A.StorageID
12. 修改列长度
alter table T_OperateLog
ALTER COLUMN [Description] nvarchar(1000)
13.数据库备份
BACKUP DATABASE ZYDangerous
to disk='d:\ZYDangerous20070822.bak'
14. NULLIF
如果两个指定的表达式相等,则返回空值
SELECT NULLIF(money, 0.00)
FROM budgets
15.COALESCE
返回其参数中第一个非空表达式
SELECT COALESCE(heigth,0)+COALESCE(width,0)
FROM wages
16. DATENAME
返回代表指定日期的指定日期部分的字符串。
语法
DATENAME ( datepart , date )
17.DATEPART
返回代表指定日期的指定日期部分的整数
语法
DATEPART ( datepart , date )
18. CAST 和 CONVERT
将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。
使用 CAST:
CAST ( expression AS data_type )
使用 CONVERT:
CONVERT (data_type[(length)], expression [, style])
19.SQL 用 0 补位 的SQl语句
select right ('00000'+XKZID,5) as XKZID from WXTemplicence 原来是 1 ,2,3......10,11 现在是
00001,00002,00003.......00010,00011.不够五位的, 左边补零;
select left (XKZID+'00000',5) as XKZID from WXTemplicence 原来是 1 ,2,3......10,11 现在是
10000,20000,30000.......10000,11000.不够五位的, 右边补零.
select cast(yuangongbh as int) from jxyuangongxx where jiaxiaobh='6101045003' 把原来是字符型的转化为整型,
去掉前面的 “0”,如“0013”变为“13”
select '0000'+ id from table
20. ISNULL
使用指定的替换值替换 NULL
下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目USE pubs
GO
SELECT AVG(ISNULL(price, $10.00))
FROM titles
GO
21. 从数据库里面取随机的n行
SELECT TOP 10 * FROM dbo.T_EnterStorage
ORDER BY NEWID()
22.删两表同记录
delete from a where bm exists (select bm from b where a.bm=b.bm and a.mc=b.mc)
23.增加列
alter table tbl_wms_TransferHeader
Add [fIsCreateASN] bit not null default(0),
fUserDef01 varchar(50) null,
fUserDef02 varchar(50) null,
fUserDef03 varchar(50) null