ddmmyyyy到sql中的sql日期时间
我需要在T-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
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我也看到了您的答案:)刚刚添加了另一部分。请解释这是如何工作的,它应该如何解决问题,以及它与现有和类似答案的区别。考虑与其他解决方案相比,解释使用此代码的优点。“只是做同样事情的另一种方式”并不是为一个八年前的问题提供另一个答案的真正理由。但如果你能在解释中指出一个优势,它可能会吸引更多的选票。