Dev*_*per 63 sql t-sql sql-server type-conversion sql-server-2008
如何将一串格式mmddyyyy
转换datetime
为SQL Server 2008?
我的目标栏是在 DateTime
我已尝试使用Convert
和大多数Date
样式值,但我收到一条错误消息:
'将varchar数据类型转换为日期时间数据类型会导致超出范围的值.
KM.*_*KM. 72
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
Run Code Online (Sandbox Code Playgroud)
试试这个:
DECLARE @Date char(8)
set @Date='12312009'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
-----------------------
2009-12-31 00:00:00.000
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
小智 7
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 = @year+@mon+@day
SELECT @output
END
Run Code Online (Sandbox Code Playgroud)
版本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
Run Code Online (Sandbox Code Playgroud)
这两种情况都依赖于sql server执行隐式转换的能力.
Convert 将是正常的答案,但该格式不是转换器可识别的格式,mm/dd/yyyy 可以使用 Convert(datetime,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)
Run Code Online (Sandbox Code Playgroud)
您可能有无法转换的错误数据。日期不应存储在 varchar 中,因为它允许诸如 ASAP 或 02/30/2009 之类的日期。对您的数据使用 isdate() 函数来查找无法转换的记录。
好的,我使用已知的良好数据进行了测试,但仍然收到消息。您需要转换为不同的格式,因为它不知道 12302009 是 mmddyyyy 还是 ddmmyyyy。yyyymmdd 的格式没有歧义,SQL Server 会正确转换
我得到了这个工作:
cast( right(@date,4) + left(@date,4) as datetime)
Run Code Online (Sandbox Code Playgroud)
但是,如果您有任何非标准格式(如“112009”或某些文本值或真正超出范围的日期),您仍会收到错误消息。
我发现这对我的转换很有帮助,没有字符串操作.https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql
CONVERT(VARCHAR(23), @lastUploadEndDate, 121)
Run Code Online (Sandbox Code Playgroud)
yyyy-mm-dd hh:mi:ss.mmm(24h)是我需要的格式.
归档时间: |
|
查看次数: |
633177 次 |
最近记录: |