将字符串格式的 dd/mm/yyyy 转换为 dd/mm/yyyy 时间日期格式

9
我正在尝试将一个以 dd/mm/yyyy 格式存储在 varchar 列中的日期转换为 datetime 格式,以便可以在数据上运行日期范围查询。目前我有以下代码,但无法正常工作。
CONVERT(varchar, CAST(date_started AS datetime), 103)

我也尝试过

convert(date_started as datetime, 103)

我需要确保输出的日期格式符合英国的 dd/mm/yyyy 格式,而不是 mm/dd/yyyy 的格式。


7
为什么不将日期存储为日期时间格式? - ediblecode
我没有,我正在使用一个不属于我的系统。 - Stew
5个回答

21

我认为您想找的是这个:

CONVERT(datetime, date_as_string, 103)

注意,datetime 没有任何格式。您需要考虑它的呈现方式。为了以适当的格式获取 datetime 的数据,您可以使用

CONVERT(varchar, date_as_datetime, 103)

这就是我之前的代码,抱歉,是我的错误。这也可以转换,但是当我在日期上执行 > '01/06/2013' 操作时,我看到的是一月份的日期。 - Stew
CONVERT(datetime, '01/06/2013', 103) - 然后所有内容都是datetime类型,比较也是在datetime数据类型上完成的。 - Jazzy J

0

我认为更准确的语法是:

SELECT CONVERT(CHAR(10), GETDATE(), 103)

我添加了SELECT和GETDATE()以进行即时测试 :)


0

尝试这段代码:

CONVERT(varchar(15), date_started, 103)

很遗憾,它没有起作用。虽然进行了转换,但当我添加了'> '01/06/2013''部分后,我看到的日期是在2011年。 - Stew
@Stew,你在"> '01/06/2013'"这部分是什么意思?你在原始帖子中没有提到过它,你对它做了什么? - DrCopyPaste
选择 date_started 从 staff WHERE(CONVERT(datetime,date_started,103)> '2013年1月6日')当我这样做时,我会看到2013年6月1日之后的日期。 - Stew
自动算法将01标识为一月份,因此会出现问题。您应该转换日期为06/01/2013。 - senthilkumar2185

0
如果您想返回格式为mm/dd/yyyy的日期,那么请使用101而不是103: CONVERT(VARCHAR(10), [MyDate], 101)

0
你可以这样做:
SELECT convert(datetime, convert(date, '27-09-2013', 103), 103) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接