ddmmyyyy到sql中的sql日期时间

ddmmyyyy到sql中的sql日期时间,sql,sql-server,Sql,Sql Server,我需要在T-SQL中将nvarchar值转换为datetime。该值采用ddmmyyyy格式,例如23072009 我需要在T-SQL中转换为datetime 我试过了 select convert(datetime, '23072009', 103) 但这是一个错误 “将nvarchar数据类型转换为datetime数据类型导致值超出范围。” 有什么想法吗 谢谢您需要转换一个字符串,而不是int。请加上一些引号: convert(datetime, '23072009', 103) 和10

我需要在T-SQL中将
nvarchar
值转换为
datetime
。该值采用
ddmmyyyy
格式,例如
23072009

我需要在T-SQL中转换为
datetime

我试过了

select convert(datetime, '23072009', 103)
但这是一个错误

“将nvarchar数据类型转换为datetime数据类型导致值超出范围。”

有什么想法吗


谢谢

您需要转换一个字符串,而不是int。请加上一些引号:

convert(datetime, '23072009', 103)

和103获取类似于“dd/mm/yyyy”的字符串,而不是“ddmmyyyy”。将格式重建为
yyyymmdd

declare @D varchar(8)
set @D = '23072009'

select cast(right(@D, 4)+substring(@D, 3, 2)+left(@D, 2) as datetime)

格式103需要
dd/mm/yyyy
。(见附件)


我认为您无法使用convert进行转换,因为没有一个convert选项具有这种格式。

您可以这样定义自定义函数:

CREATE FUNCTION [dbo].[GetCustomDate] (@customDateString NVARCHAR(MAX)) 
RETURNS DATETIME
AS
BEGIN

    RETURN CONVERT(DATETIME, RIGHT(@customDateString, 4) + RIGHT(LEFT(@customDateString, 4), 2) + LEFT(@customDateString, 2))

END

样式103将接受dd/mm/yyyy格式的字符串。所以你的代码应该是

declare @date varchar(8)
set @date='23072009'
select convert(datetime,stuff(stuff(@date,5,0,'/'),3,0,'/')  , 103) 
将SQL Server中的VARCHAR(dd-mm-yyyy)更改为日期(yyy-mm-dd)

DECLARE @VarDate VARCHAR(10)
SET @VarDate  = '22-02-1994'

SELECT CONVERT(DATETIME, CONVERT(VARCHAR, CONVERT(DATE, @VarDate, 103), 102))

错误看起来像什么?为什么要给
convert
一个int而不是字符串?请提供所有的代码,错误是什么?我建议您首先要找到一种方法,避免将
datetime
s作为数据库中的字符串。这不起作用-仍然得到:
Msg 242,级别16,状态3,第1行将varchar数据类型转换为datetime数据类型导致值超出范围。
@marc_s yep我也看到了您的答案:)刚刚添加了另一部分。请解释这是如何工作的,它应该如何解决问题,以及它与现有和类似答案的区别。考虑与其他解决方案相比,解释使用此代码的优点。“只是做同样事情的另一种方式”并不是为一个八年前的问题提供另一个答案的真正理由。但如果你能在解释中指出一个优势,它可能会吸引更多的选票。