我不断收到错误消息:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
这有效:
CONVERT(datetime, '20180718', 103)
这不起作用:
CONVERT(datetime, (RIGHT([DATE],4)+SUBSTRING([DATE], 4,2)+LEFT([DATE], 2)), 103)
这是一回事,为什么不起作用?
编辑:[DATE] nvarchar列具有以下格式:18/07/2018。所以当我使用Right,Substring和Left时,我得到20180718
答案 0 :(得分:2)
那不是完全一样的东西。看看您的字符串返回了什么。
declare @Date varchar(10) = '18072018'
select RIGHT(@Date,4)+SUBSTRING(@Date, 4,2)+LEFT(@Date, 2)
答案 1 :(得分:1)
我认为没有必要进行串联,您可以将convert()
与样式代码103
一起使用:
select convert(datetime, '18/07/2018', 103)
样式代码103
实际上是documented的dd/mm/yyyy
(英国/法国标准)。
答案 2 :(得分:0)
编辑:正如Sean在他的回答中指出的那样,可能只是您抓错了字符串。如果仍然无法使用,请参见以下内容:
这不是一回事,这就是重点。第一个是硬编码的,并且是有效日期。该错误表明您的数据中至少有一行没有包含有效日期。我会尝试按每个日期部分运行计数(即Right(Date,4))。这将使查找引起麻烦的值更加容易。月应为1-12,天应为1-30、31、28或29 ...
答案 3 :(得分:0)
当将日期和时间值从字符串表示形式转换为DATETIME数据类型表示形式时,SQL错误241发生,并且SQL Server由于日期/时间值格式错误而无法执行转换。 这可以帮助您了解: http://www.sql-server-helper.com/error-messages/msg-241.aspx
答案 4 :(得分:0)
我发现了问题-查询没有返回任何NULL日期,因为它使用的是内部联接,但是NULL存在。我以为转换只能在内部联接之后应用。