前言:以前那家公司用linq查詢比較多很少用到sql拼接 sql水平一直也就那樣 後來的這家公司業務基本寫在存儲過程中 所以開始寫sql的漫漫長路
查詢表註釋/查詢年月
--查詢表註釋
Select sc.NAME,dc.ColumnName_Cn,t.name as ColumnType,t.length as ColumnWidth,case when sc.isnullable=1 THEN 'TRUE' ELSE 'FALSE' END AS yxnnull,dc.DefaultValue,dc.Remarks
from syscolumns sc
left outer join systypes t on sc.xtype=t.xtype
LEFT JOIN Data_Dict_Columns dc ON sc.name=dc.ColumnName AND dc.TableName='InvoiceMainBody'
Where sc.ID=OBJECT_ID('InvoiceMainBody')
ORDER BY colid
--InvoiceMainBody指表名
select dateadd(month, datediff(month, 0, getdate()), 0) --當月第一天
select dateadd(month, datediff(month, 0, dateadd(month, 1, getdate())), -1) --當月最後一天
select dateadd(year, datediff(year, 0, getdate()), 0) --當年第一天
SELECT dateadd(year, datediff(year, 0, dateadd(year, 1, getdate())), -1) --當年最後一天
SELECT GETDATE() --查詢當前時間
SELECT datepart(yy,'2017-1-1') --截取年份 返回:2017
一些常用的函數
DATEADD()函數--語法
DATEADD(datepart,number,date)
date:參數是合法的日期表達式
number:是希望添加的間隔數,對於未來的時間,此數是正數,對於過去的時間,此數是負數。
datepart 參數可以是下列的值:
datepart | 值 |
---|---|
季度 | qq, q |
年 | yy, yyyy |
年中的日 | dy, y,day |
月 | mm, m |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小時 | hh |
分鐘 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
納秒 | ns |
exp:
DECLARE @endtime='2001-1-1'
SELECT @endtime=DATEADD(DAY,1,@endtime)
--返回:2001-1-2
CAST()函數
--語法
CAST (expression AS data_type)
expression:任何有效的SQServer表達式。
AS:用於分隔兩個參數,在AS之前的是要處理的數據,在AS之後是要轉換的數據類型。
data_type:目標系統所提供的數據類型,必須char,int等
exp:
DECLARE @startTime DATETIME='2018-2-1'
CAST(@startTime AS VARCHAR(30))
--@startTime從DATETIME類型轉換爲VARCHAR類型
ISNULL()函數
--語法
ISNULL ( check_expression , replacement_value )
check_expression將被檢查是否爲 NULL的表達式。check_expression 可以是任何類型的。replacement_value在 check_expression 爲 NULL時將返回的表達式。replacement_value 必須與check_expresssion 具有相同的類型。
如果 check_expression 不爲 NULL,那麼返回該表達式的值;否則返回 replacement_value。
exp:
DECLARE @salesman varchar(50)=null
select isnull(@salesman,'helloworld')
--返回helloworld
臨時表的創建
--創建臨時表
--本地臨時表的名稱以單個數字符號 (#) 爲標識,它們僅對當前的用戶連接(也就是創建本地臨時表的connection)是可見;當用戶從 SQL Server 實例斷開連接時被刪除。
CREATE TABLE #Temp
(
id int,
customer_name nvarchar(50),
age int
)
--全局臨時表的名稱以兩個數字符號 (##) 爲標識,創建後對任何數據庫連接都是可見的,當所有引用該表的數據庫連接從 SQL Server 斷開時被刪除。
CREATE TABLE ##Temp
(
id int,
customer_name nvarchar(50),
age int
)