SQL Server 2008中的Varchar到datetime转换
我需要将varchar转换为datetime。我试过像下面这样的方法SQL Server 2008中的Varchar到datetime转换,sql,sql-server-2008,datetime,type-conversion,varchar,Sql,Sql Server 2008,Datetime,Type Conversion,Varchar,我需要将varchar转换为datetime。我试过像下面这样的方法 declare @datevarchar(150)='01/10/15' declare @datenew date select @datenew = convert(smalldatetime, CONVERT(nvarchar(10), CAST(@date AS DATETIME), 101) ,101) print @datenew 输出为:2015-01-10 但是当我把日期改成 de
declare @datevarchar(150)='01/10/15'
declare @datenew date
select
@datenew = convert(smalldatetime, CONVERT(nvarchar(10), CAST(@date AS DATETIME), 101) ,101)
print @datenew
输出为:2015-01-10
但是当我把日期改成
declare @date varchar(150)='13/10/15'
它抛出以下错误:
将varchar数据类型转换为datetime数据类型导致值超出范围
datetime的结果格式为YYYY-MM-DD。我希望结果的格式为DD-MM-YYYY
我该怎么办
提前感谢适合dd/MM/yyyy
字符串表示的样式是103,
而101样式适合MM/dd/yyyy
这一点,加上
01
是有效的一天,也是有效的一个月,而13
只是有效的一天,是您第一次转换成功而最后一次转换失败的原因
因此,如果您有一个字符串,它以dd/MM/yyyy
格式表示日期,您可以将其转换为如下日期:
DECLARE @Datestring char(10) = '13/09/2016' -- See note #1
SELECT CONVERT(Date, @DateString, 103)
结果将是代表2016年9月13日的日期值
注:#1-无需使用
nvarchar(150)
来表示所有字符都与ascii兼容的固定长度字符串。这就是为什么我的字符串是char(10)
#2-正如我在评论中所写的-结果是一个日期数据类型,因此,如果您正在寻找显示格式,则需要一个表示日期值的字符串。适合dd/MM/yyyy
字符串表示的样式是103,
SET DATEFORMAT dmy; --ADD this command
DECLARE @date as date = '13/10/15'; --CHANGE the type to date
declare @datenew date
select
@datenew = convert(smalldatetime, CONVERT(nvarchar(10), CAST(@date AS DATETIME), 101) ,101)
print @datenew
而101样式适合MM/dd/yyyy
这一点,加上
01
是有效的一天,也是有效的一个月,而13
只是有效的一天,是您第一次转换成功而最后一次转换失败的原因
因此,如果您有一个字符串,它以dd/MM/yyyy
格式表示日期,您可以将其转换为如下日期:
DECLARE @Datestring char(10) = '13/09/2016' -- See note #1
SELECT CONVERT(Date, @DateString, 103)
结果将是代表2016年9月13日的日期值
注:#1-无需使用
nvarchar(150)
来表示所有字符都与ascii兼容的固定长度字符串。这就是为什么我的字符串是char(10)
#2-正如我在评论中所写的那样-结果是一个日期数据类型,因此,如果您正在寻找显示格式,则需要一个表示日期值的字符串。只需将变量定义为
2015-01-10
。使用一个标准的日期格式,你的问题就会得到解决。如果你在这里查找代码101,你会看到它应该是m/d/y格式(13不是一个月)。你能退一步解释一下你真正想做什么吗?你为什么关心日期的格式?这取决于您当时使用的任何客户端工具。始终坚持标准YYYY-MM-DD格式。(如果出于某种原因希望以其他格式显示,请尽可能晚地进行转换。)只需将变量定义为2015-01-10
。使用一个标准的日期格式,你的问题就会得到解决。如果你在这里查找代码101,你会看到它应该是m/d/y格式(13不是一个月)。你能退一步解释一下你真正想做什么吗?你为什么关心日期的格式?这取决于您当时使用的任何客户端工具。始终坚持标准YYYY-MM-DD格式。(如果出于某种原因希望以其他格式显示,请尽可能晚地进行转换。)
SET DATEFORMAT dmy; --ADD this command
DECLARE @date as date = '13/10/15'; --CHANGE the type to date
declare @datenew date
select
@datenew = convert(smalldatetime, CONVERT(nvarchar(10), CAST(@date AS DATETIME), 101) ,101)
print @datenew