好吧... 我承認這篇或許很無聊,不過對於一些 SQL 苦手/新手 在對於一些日期轉換的上面上應該多少有些些小幫助。
--------------------------------------------------------------------
Transact-SQL Server日期函數 CONVERT 範例
在 Transact-SQL 的預設日期 DATETIME 格式是 yyyy-mm-dd hh:mm:ss.mmm
例如:
SELECT GETDATE()
=> 2007-12-31 10:30:20.517
而在程式中常常需要日期的處理,尤其是什麼只要日期不要時間啊,只要時間不要日期啊,或是日期的 Format 等等,為了省掉在程式上撰寫轉換函數,這裡有些些 Transact-SQL 常用到的日期時間格式轉換,方法如下:
SELECT CONVERT(VARCHAR(18) , getdate(), 100)
=> 12 31 2007 10:30AM
SELECT CONVERT(VARCHAR(10) , GETDATE(), 101 )
=> 12/31/2007
SELECT CONVERT(VARCHAR(10) , GETDATE(), 102 )
=> 2007.12.31
SELECT CONVERT(VARCHAR(10) , GETDATE(), 103 )
=> 31/12/2007
SELECT CONVERT(VARCHAR(10) , GETDATE(), 104 )
=> 31.12.2007
SELECT CONVERT(VARCHAR(10) , GETDATE(), 105 )
=> 31-12-2007
SELECT CONVERT(VARCHAR(10) , GETDATE(), 106 )
=> 31 12 2007
SELECT CONVERT(VARCHAR(11) , GETDATE(), 107 )
=> 12 31, 2007
SELECT CONVERT(VARCHAR(8) , GETDATE(), 108 )
=> 10:30:20
SELECT CONVERT(VARCHAR(25) , GETDATE(), 109)
=> 12 31 2007 10:30:20:517AM
SELECT CONVERT(VARCHAR(10) , GETDATE(), 110 )
=> 12-31-2007
SELECT CONVERT(VARCHAR(10) , GETDATE(), 111 )
=> 2007/12/31
SELECT CONVERT(VARCHAR(8) , GETDATE(), 112 )
=> 20071231
SELECT CONVERT(VARCHAR(23) , GETDATE(), 113 )
=> 31 12 2007 10:30:20:517
SELECT CONVERT(VARCHAR(12) , GETDATE(), 114 )
=> 10:30:20:517
SELECT CONVERT(VARCHAR, GETDATE(), 120 )
=> 2007-12-31 10:30:20
最後
SELECT REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-',''),' ',''),':','')
=> 20071231103020
這些全部已在 Transact-SQL 上測試過了
--------------------------------------------------------------
好吧,我承認,以上真的很無聊,很無聊
30 回應:
最後一個語法很少見耶
應該沒有人會故意把日期/時間全弄成一串的吧
呵呵..
因為有人曾問我流水號的寫法啊.. 這是一個方法 (取日期那一段)
或是要產生一個簡單的不重複的值,這是一個很快且簡易的寫法
謝謝板大,我收下了
在同一秒不query兩次的前提下
的確是個產生不重複值的好方法
>>簡單不重複的值,很快且簡易的寫法
不受時間限制,也可以用 NEWID()
select newid()
新年快樂!
國良先生
沒錯,NEWID 可以產生出不重複的唯一值,謝謝指教囉。
NEWID 用在不需要顯示的 SYSTEM ID 上還蠻方便的。
新年快樂 !
yuanpai,
妳說的也沒錯啦,前提是在一秒不 query 兩次的前提下。不過為了避免這個情況發生,可以把要因提升到千分之一秒來降低發生錯誤的機會。
這是用在哪裡的密碼?(外行人的問題lol..)
dear您好:
於網路搜尋找到您的space...
想請教您關於轉換日期的問題...
如果在我的資料庫...即有的欄位【transdate】...
其日期的格式是「20080402」...
如果我想要把他轉成『2008/04/02』...
是否有辦法可以...
因為運用您剛剛的方法...不行耶...
可麻煩您若不忙...可以我一下...
我的mail是:[ apple1588@hotmail.com ]...
謝謝您
Peggy,
你得要先確認一下你的欄位格式是 DateTime 嗎 ?
如果是 varchar 之類的那就只能用程式去處理了。
Hi Skyer & Peggy
CONVERT(DATETIME,'20080402')
就能將字串'20080402'變成日期
所以 SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, '20080402'), 111) 就能將字串'20080402'變成字串'2008/04/02'
在SQL Server 2000,2005 都試過OK。
啊哈...
對喔,我都忘了也可以直接在 SQL 裡先把 字串先轉成日期,這樣就精簡多了 !
謝謝國良先生啦
那請問一下 我現在DateTime的格式為 2008/09/12 下午01:08:08 這樣子,可是我想要的格式是"月/日 時" EX: 09/12 13這樣的格式要怎麼用呢?
SELECT REPLACE(RIGHT(LEFT(CONVERT(VARCHAR(20) , GETDATE(), 120 ),13),8),'-','/')
就好啦
請問一下我現在的資料庫日期欄位為smalldatetime,他所顯現的內容為2008/11/1 上午 12:00:00,我也嘗試著用這個語法寫SELECT CONVERT(VARCHAR(10) , GETDATE(), 111 ),雖然可以顯示為我要的日期形式2008/11/1,但他出現的是今天的日期而不是我資料庫的內容哩...請問大大要如何寫呢?
請問一下我現在資料庫有一欄位為smalldatetime 類型內容為2008/12/31,但我現在要下查詢指令WHERE 可是他只能讓我查2008/12/31,可是我要查的是20081231這樣,請問指令該如何下呢?
To Chian,
因為妳是用 GETDATE() 這個函數啊, 這個函數會得到目前的時間日期,妳只要把它換成妳資料庫裡的名稱就好了,譬如說
SELECT CONVERT(VARCHAR(10) , Mydate, 111 )
To Lucy,
如果是我的話,我會在程式裡處理這件事,而不會在 SQL 裡在 Where 的地方使用 20081231。
意思就是在程式處理之後把 Where 裡的條件變成 2008/12/31,我個人的習慣還是 SQL 越簡單越好。
版大你好,我是Microsoft SQL 2005的新手,現在卡在想將DATETIME格式改成只有年月日的格式,所以看到您的文章簡直就像看到了救星...可是...我都是用最簡單的"新增資料表"來打入我要的欄位名稱跟屬性,完全不會將您的語法寫入我的屬性中...可以請教我在"資料行屬性"裡頭要如何做修正呢?謝謝您!
Dear Sherry,
Datetime 格式所保留的資料就是時間的資料。而以上所討論的,都是主要在於取出資料時的格式化,以便閱讀上的方便。
而所說的那些語法,也都是在下 SQL 指令取資料的時候用到的,跟所輸入的東西沒有關係。
不知道妳的意思是不是這樣?
恩...應該是說....我現在在嘗試著寫訂單資料表...我希望我在輸入資料打上日期時,他只會秀出2009/3/2而不是 2009/3/2 12:00
麻煩您幫我解惑了!
Dear Sherry,
如果沒有會錯妳的意思,這應該不是很難。妳輸入日期後,妳可以不管資料庫內變成何種格式,只要在取出的時後寫成
SELECT CONVERT(VARCHAR(10) , 資料欄名稱, 111)
這樣顯示出來的日期就會是你要的格式了。
原來如此...那我就等我轉去ACCESS給使用者使用的時候再做轉換試試看好了,謝謝版大..不過再好奇問一下..假設我現在完全沒有SQL的基礎想要買書回來寫一般公司用的進銷存系統,請問您會推薦哪一本嗎?謝謝囉!
謝謝你的提供^^
大大您好,寫這篇日期Convert或許對您來說很無聊,但對我們這些初學者來說真的很有用,可以減少自己摸索的時間,真的謝啦,希望您無聊的時候可以再寫些無聊的文章^_^
S大加油!
很感謝你提供這些方法!很有用呢!
對於我來說,確實有幫助,很明確表達,後面那個參數所造成的變化。感恩
感謝~~有幫助到
Sourcemy blog newsadditional resources click sitepop over to these guys
張貼留言