SQL Server發展至今,關於日期的格式的控制方法,有傳統的方法,比如CONVERT(),也有比較便利的新方法,比如FORMAT();同樣,關於日期的操作函式,也分為傳統方法:DATEADD()等,也有便利的新方法:EOMonth()等。
一,日期的格式化
格式化是指把日期型別(Date)、日期和時間型別轉化為字元型別,通常使用CONVERT()和FORMAT()函式。
1,傳統的CONVERT()
SQL Server控制日期的的顯示格式,通常使用CONVERT()函式,透過控制style引數來控制日期顯示的格式,但是,style很多,不利於記憶。
符合東方人閱讀習慣的style及其顯示格式如下:
CONVERT()函式的style是數字,記憶起來比較困難,並且只能按照系統定義的格式來顯示,不夠靈活。SQL Server提供更為靈活的轉換函式FORMAT()。
2,便利的FORMAT()函式
FORMAT()函式,可以方便和靈活地控制數值、日期和時間型別的顯示格式,通常情況下,FORMAT()函式主要用於格式化顯示date/time型別和數值型別,引數format用於指定顯示的格式,給予使用者對格式更自由地控制,culture引數是可選的,用於指定顯示的語言,該函式返回值的資料型別是NVARCHAR,如果格式轉換失敗,該函式返回NULL:
引數format使用#表示一個數值,引數 format 使用以下佔位符來表示日期/時間的格式:
(1)把date/time格式化
在format引數中指定日期/時間顯示的格式,以特定的格式: “yyyy:MMdd hh:mm:ss fffffff” 顯式日期/時間,例如:
(2)轉換數值型別
在引數format中使用#代表一個數字,使用相應的連線符,拼接成數字的格式字元,例如:
二,日期和時間的結構
常用的日期的構成(datepart)是:year、month、day、hour、minute、second、ns、TZoffset(簡寫為 tz)
在實際的產品環境中,周、季度等都很有用途:
DATEPART()返回的datepart是int型別,如果想要返回字元型別,可以使用DATENAME()函式:
透過datepart來構造日期,常用的函式有:
引數precision 是指小數秒的精度,指的是DateTime2(n)、DateTimeOffset(n),Time(n)中的n值,表示以多少位小數表示1s。
三,日期操作
日期函式:EOMonth、Format、DateAdd、DateDiff、SwitchOffset
1,月份的最後一天
函式 EOMonth() 返回指定日期的最後一天
引數註釋:
例如,檢視當前月的最後一天、下一個月的最後一天、上一個月的最後一天:
2,月份的第一天
使用DateFromParts() 函式,能夠從3個正整數(year,month,day)中獲取date 型別,只需要將day 引數設定1,就能獲取月份的第一天的日期。
也可以使用Format() 函式, 以字串形式返回月份的第一天,例如,獲取當前月份的第一天:
3,切換時區
把DateTimeOffset型別的資料切換到指定的時區,在轉換過程中,UTC時間是固定的,依據固定的UTC時間,切換到特定時區的本地時間:
使用SwitchOffset()函式把DateTimeOffset的時區偏移(Offset)切換到指定的時區中,例如,把本地時間的時區東八區切換到東七區:
可以看到,東7區的時間比東8區的時間晚一個小時。
4,當前日期是周幾
在SQL Server中,透過DataFirst選項設定一週的第一天,序數是從1到7,表示一週的7天。
(1)可以透過@@datefirst來獲取設定的值
(2)使用函式datepart函式獲取當天是周幾
由於設定不同的DateFirst,會導致datepart返回不同的數值,所以必須藉助@@DateFirst
4,使用DateName獲取WeekDay的名字
WeekDay的名字跟系統的語言設定有管,跟DateFirst的設定沒有關係
(1) 檢視當前的語言設定
(2) 檢視系統支援的語言
(3) 設定語言
(4) 使用DateName獲取WeekDay的名字
SQL Server發展至今,關於日期的格式的控制方法,有傳統的方法,比如CONVERT(),也有比較便利的新方法,比如FORMAT();同樣,關於日期的操作函式,也分為傳統方法:DATEADD()等,也有便利的新方法:EOMonth()等。
一,日期的格式化
格式化是指把日期型別(Date)、日期和時間型別轉化為字元型別,通常使用CONVERT()和FORMAT()函式。
1,傳統的CONVERT()
SQL Server控制日期的的顯示格式,通常使用CONVERT()函式,透過控制style引數來控制日期顯示的格式,但是,style很多,不利於記憶。
符合東方人閱讀習慣的style及其顯示格式如下:
101: mm/dd/yyyy110: mm-dd-yyyy111: yyyy/mm/dd112: yyyymmdd120: yyyy-mm-dd hh:mm:ss121: yyyy-mm-dd hh:mm:sssssssCONVERT()函式的style是數字,記憶起來比較困難,並且只能按照系統定義的格式來顯示,不夠靈活。SQL Server提供更為靈活的轉換函式FORMAT()。
2,便利的FORMAT()函式
FORMAT()函式,可以方便和靈活地控制數值、日期和時間型別的顯示格式,通常情況下,FORMAT()函式主要用於格式化顯示date/time型別和數值型別,引數format用於指定顯示的格式,給予使用者對格式更自由地控制,culture引數是可選的,用於指定顯示的語言,該函式返回值的資料型別是NVARCHAR,如果格式轉換失敗,該函式返回NULL:
引數format使用#表示一個數值,引數 format 使用以下佔位符來表示日期/時間的格式:
yyyy、MM、dd:表示年、月、日hh:mm:ss fffffff:表示時、分、秒、毫秒使用“/”,“-”等作為連線各個部分(part)的分割符號(1)把date/time格式化
在format引數中指定日期/時間顯示的格式,以特定的格式: “yyyy:MMdd hh:mm:ss fffffff” 顯式日期/時間,例如:
(2)轉換數值型別
在引數format中使用#代表一個數字,使用相應的連線符,拼接成數字的格式字元,例如:
二,日期和時間的結構
常用的日期的構成(datepart)是:year、month、day、hour、minute、second、ns、TZoffset(簡寫為 tz)
在實際的產品環境中,周、季度等都很有用途:
quarter:季度,取值範圍是 1、2、3、4week:周在年中的序數,取值範圍是 1 - 53dayofyear:天在年中的序數,取值範圍是 1 - 366weekday:天在一週中的序數,取值範圍是 1 - 7DATEPART()返回的datepart是int型別,如果想要返回字元型別,可以使用DATENAME()函式:
透過datepart來構造日期,常用的函式有:
引數precision 是指小數秒的精度,指的是DateTime2(n)、DateTimeOffset(n),Time(n)中的n值,表示以多少位小數表示1s。
三,日期操作
日期函式:EOMonth、Format、DateAdd、DateDiff、SwitchOffset
1,月份的最後一天
函式 EOMonth() 返回指定日期的最後一天
引數註釋:
start_date: 有兩種輸入方式,能夠轉換為Date的字串型別 和 date 資料型別month_to_add: 是int 型別,能夠為正整數,負整數和0,預設值是0,如果省略,那麼使用預設值0。例如,檢視當前月的最後一天、下一個月的最後一天、上一個月的最後一天:
2,月份的第一天
使用DateFromParts() 函式,能夠從3個正整數(year,month,day)中獲取date 型別,只需要將day 引數設定1,就能獲取月份的第一天的日期。
也可以使用Format() 函式, 以字串形式返回月份的第一天,例如,獲取當前月份的第一天:
3,切換時區
把DateTimeOffset型別的資料切換到指定的時區,在轉換過程中,UTC時間是固定的,依據固定的UTC時間,切換到特定時區的本地時間:
引數註釋:
DATETIMEOFFSET:DateTimeOffset(n)型別的變數time_zone:指定的目標時區資料,格式是 [+|-] hh:mm使用SwitchOffset()函式把DateTimeOffset的時區偏移(Offset)切換到指定的時區中,例如,把本地時間的時區東八區切換到東七區:
可以看到,東7區的時間比東8區的時間晚一個小時。
4,當前日期是周幾
在SQL Server中,透過DataFirst選項設定一週的第一天,序數是從1到7,表示一週的7天。
(1)可以透過@@datefirst來獲取設定的值
(2)使用函式datepart函式獲取當天是周幾
由於設定不同的DateFirst,會導致datepart返回不同的數值,所以必須藉助@@DateFirst
4,使用DateName獲取WeekDay的名字
WeekDay的名字跟系統的語言設定有管,跟DateFirst的設定沒有關係
(1) 檢視當前的語言設定
(2) 檢視系統支援的語言
(3) 設定語言
(4) 使用DateName獲取WeekDay的名字