【问题标题】:Date time conversion error when converting varchar date format in SQL Server在 SQL Server 中转换 varchar 日期格式时出现日期时间转换错误
【发布时间】:2019-08-03 17:35:44
【问题描述】:

我想将此日期时间格式'01/02/2019 12:00:00 AM' 转换为
'2019-02-01' 格式。

我已经写了这段代码:

declare @start_date datetime;
declare @end_date datetime;

set @start_date = '01/02/2019 12:00:00 AM';
set @end_date = '28/02/2019 12:00:00 AM';

select * 
from test 
where [Global Dimension 1 Code] in ('FIN') 
  and convert(char(10), [Posting Date], 126) between convert(date, convert(char(10), @start_date, 126), 103)  
                                                 and convert(date, convert(char(10), @end_date, 126), 103)

但是我遇到了一个错误

消息 242,第 16 级,状态 3,第 8 行
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

消息 241,第 16 级,状态 1,第 10 行
从字符串转换日期和/或时间时转换失败。

但是当我运行如下查询时,它执行时没有错误。

select * 
from test 
where [Global Dimension 1 Code] in ('FIN') 
  and convert(char(10), [Posting Date], 126) between convert(date, convert(char(10), '01/02/2019 12:00:00 AM', 126), 103) 
                                                 and convert(date, convert(char(10), '28/02/2019 12:00:00 AM', 126), 103)

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    使用 103

    SELECT convert(datetime, '01/02/2019 12:00:00 AM', 103)
    

    SELECT convert(char(10), '01/02/2019 12:00:00 AM', 126)
    

    【讨论】:

    • 是的,它适用于 SELECT convert(datetime, '01/02/2019 12:00:00 AM', 103) 。谢谢你的回答
    【解决方案2】:

    在下面与 cast()format() 一起使用 - 将适用于 sql server 2012+

    DEMO

    select format(cast('01/02/2019 12:00:00 AM' as date),'yyyy-MM-dd')
    

    【讨论】:

    • 收到错误@fa06 'format' 不是可识别的内置函数名称。
    • 是的,sql server 2012版@Haz中提供格式化功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多