将时间从英国格式转换为美国格式

Convert time from British to American format

我有以下代码在“CAST('10-10-2014' AS DATETIME)”时失败,有人可以帮忙吗?

SELECT Sum(poval)
FROM   iesa_dwhs.dbo.vw_an_purch_bkb_010_sources vw_AN_Purch_BKB_010_Sources
WHERE  Upper(plant) = Upper(('0LH0'))
       AND dt BETWEEN Cast('10-10-2014' AS DATETIME) AND Getdate() - 7
       AND Upper(matcat) = 'CODED'

你确定它是日期时间吗?

安全的选择是 yyyy-mm-dd,因为它只有一种 mm dd 格式

这一切对我有用

select Cast('10-10-2014' AS DATETIME) 
select Cast('2014-10-10' AS DATETIME)
select GETDATE() 
select GETDATE() - 7 

select 'yes'
where Cast('2014-10-15' AS DATETIME)  between Cast('2014-10-10' AS DATETIME) AND Getdate() - 7 

select 'yes'
where Cast('10-12-2014' AS DATETIME)  between Cast('10-10-2014' AS DATETIME) AND (Getdate() - 7)

如果您使用的是 SQL Server 2014 或更新版本,则可以使用 DATEFROMPARTS 函数。这样你就不用担心格式了。

Read the documentation。明确您的转换:

select british_style_datetime = convert(datetime, '23-10-2015 20:15:10.123' , 103 )

如果您没有明确说明,转换将根据相关 SQL 服务器实例的配置设置完成。如果 date/time 字符串是无歧义的,转换很可能会失败,像这样:

select convert(datetime, '23-10-2015' )

生产(在我的 SQL 服务器上):

Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type
resulted in an out-of-range value.

如果转换不明确,操作可能会成功,但您可能会得到不正确的值,例如

select convert(datetime, '11-10-2015' )

生产(在我的 SQL 服务器上):

2015-11-10 00:00:00.000