如何在SQL Server 2008中將mmddyyyy
格式的字符串轉換爲datetime
?在SQL Server中將varchar轉換爲datetime
我的目標列在DateTime
我試圖與Convert
和大多數Date
樣式值,但是我得到一個錯誤信息:
「varchar數據類型爲日期時間轉換數據類型導致超出範圍的值。'
如何在SQL Server 2008中將mmddyyyy
格式的字符串轉換爲datetime
?在SQL Server中將varchar轉換爲datetime
我的目標列在DateTime
我試圖與Convert
和大多數Date
樣式值,但是我得到一個錯誤信息:
「varchar數據類型爲日期時間轉換數據類型導致超出範圍的值。'
OP希望MMDDYY和一個普通的轉換不會爲工作:
select convert(datetime,'12312009')
Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in
an out-of-range datetime value
所以試試這個:
DECLARE @Date char(8)
set @Date='12312009'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))
OUTPUT:
-----------------------
2009-12-31 00:00:00.000
(1 row(s) affected)
看看CAST
/CONVERT
在BOL應該是一個開始。
如果你的目標列是datetime
你不需要轉換它,SQL會爲你做。
否則
CONVERT(datetime, '20090101')
應該這樣做。
這是一個link應該有所幫助:
轉換將是正常的回答,但格式是不是該轉換器可識別的格式,MM/DD/YYYY可以用轉換轉換(日期時間, yourdatestring,101),但是你沒有這種格式,所以失敗了。
問題是格式是非標準的,你將不得不操縱它到標準的轉換可以從可用的理解。
砍死在一起,如果你能機制保障格式
declare @date char(8)
set @date = '12312009'
select convert(datetime, substring(@date,5,4) + substring(@date,1,2) + substring(@date,3,2),112)
我覺得CONVERT是因爲你可以包括樣式(日期格式)的最佳選擇,讓美國違約將是110是MM-DD -YYYY。
可能是你有壞的數據無法轉換。日期不應存儲在varchar中,因爲它允許日期如ASAP或02/30/2009。對數據使用isdate()函數來查找無法轉換的記錄。
好的我用已知的良好數據進行了測試,仍然收到了消息。您需要轉換爲其他格式,因爲它不知道12302009是mmddyyyy還是ddmmyyyy。YYYYMMDD的格式也不含糊和SQL Server將其轉換正確
我得到這個工作:
cast(right(@date,4) + left(@date,4) as datetime)
不過,如果您有任何有能力的非標準你仍然會得到一個錯誤信息格式如'112009'或一些文本值或真正的超出範圍日期。
SQL Server可以隱式轉換字符串「YYYYMMDD」的形式,以日期時間 - 所有其他字符串必須顯式轉換。這裏有兩個快速的代碼塊將執行從你所談論的形式轉換:
版本1使用單位的變量:
BEGIN
DECLARE @input VARCHAR(8), @mon CHAR(2),
@day char(2), @year char(4), @output DATETIME
SET @input = '10022009' --today's date
SELECT @mon = LEFT(@input, 2), @day = SUBSTRING(@input, 3,2), @year = RIGHT(@input,4)
SELECT @output = @[email protected][email protected]
SELECT @output
END
版本2不使用單元變量:
BEGIN
DECLARE @input CHAR(8), @output DATETIME
SET @input = '10022009' --today's date
SELECT @output = RIGHT(@input,4) + SUBSTRING(@input, 3,2) + LEFT(@input, 2)
SELECT @output
END
兩種情況都依賴於SQL Server的做隱式轉換的能力。
我有運氣類似的東西:
Convert(DATETIME, CONVERT(VARCHAR(2), @Month) + '/' + CONVERT(VARCHAR(2), @Day)
+ '/' + CONVERT(VARCHAR(4), @Year))
這個問題的根本原因可能是在區域設置 - DB等待YYYY-MM-DD,而應用程序sents,例如,DD-MM -YYYY(俄語區域設置格式)與我的情況一樣。我所做的 - 將語言環境從俄語改爲英語(美國)和voilà。
這似乎是最簡單的方法..
SELECT REPLACE(CONVERT(CHAR(10), GETDATE(), 110),'-','')
SQL標準的日期,而插入或更新必須是1753年1月1日59:59 12/31/9999之間12:00:00 AM和下午。
所以,如果你插入/更新低於1753年1月1日,你會得到這個錯誤。
我會使用STUFF
插入字符分割,然後用CONVERT
提供相應的款式。事情是這樣的:
DECLARE @dt VARCHAR(100)='111290';
SELECT CONVERT(DATETIME,STUFF(STUFF(@dt,3,0,'/'),6,0,'/'),3)
首先使用兩次STUFF
獲得90年11月12日,而不是111290,比你使用將其轉換爲datetime
(或任何其他配件格式:使用.
爲德國,-
英國...)More details on CAST and CONVERT
最好的是,以正確存儲日期和時間值。
yyyyMMdd
yyyy-MM-dd
或yyyy-MM-ddThh:mm:ss
More details on ISO8601任何文化特定的格式將比分追成麻煩遲早後來......
使用Try_Convert:返回轉換爲指定的數據類型,如果轉換成功的值;否則,返回null。
DECLARE @DateString VARCHAR(10) ='20160805'
SELECT TRY_CONVERT(DATETIME,@DateString)
SET @DateString ='Invalid Date'
SELECT TRY_CONVERT(DATETIME,@DateString)
我發現我的轉換這是很有幫助的,沒有字符串操作。 https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql
CONVERT(VARCHAR(23), @lastUploadEndDate, 121)
YYYY-MM-DD HH:MI:ss.mmm(24小時)是我所需要的格式。
tsql是否有像MySQL一樣的str_to_date函數? http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date – dnagirl 2009-10-02 15:00:50
OP想要mmddyyyy;選擇convert(datetime,'12312009') - >>> _ Msg 242,Level 16,State 3,Line 1將char數據類型轉換爲日期時間數據類型導致超出範圍的日期時間值。 – 2009-10-02 15:04:59