从nvarchar至今的CAST&CONVERT根本无法用于列

时间:2018-08-08 16:29:26

标签: sql sql-server tsql

我不断收到错误消息:

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

This is the dates I'm using after concatenation

5 个答案:

答案 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实际上是documenteddd/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存在。我以为转换只能在内部联接之后应用。