SQL Server 2008 中的 Varchar 到日期时间的转换
Varchar to datetime conversion in SQL Server 2008
我需要将 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
但是当我将日期更改为
declare @date varchar(150)='13/10/15'
它抛出以下错误:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
日期时间的结果格式为 YYYY-MM-DD。我想要格式为 DD-MM-YYYY..
的结果
我该怎么办?
提前致谢
符合dd/MM/yyyy
字符串表示的convert样式为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 - 正如我在评论中所写 - 结果是一个日期数据类型,因此它 如果您正在寻找一种显示格式,那么您需要一个表示日期值的字符串。
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
我需要将 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
但是当我将日期更改为
declare @date varchar(150)='13/10/15'
它抛出以下错误:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
日期时间的结果格式为 YYYY-MM-DD。我想要格式为 DD-MM-YYYY..
的结果我该怎么办?
提前致谢
符合dd/MM/yyyy
字符串表示的convert样式为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 - 正如我在评论中所写 - 结果是一个日期数据类型,因此它
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