如果用户默认语言未知,则SQL查询DateTime值
我在数据库中有一个列为如果用户默认语言未知,则SQL查询DateTime值,sql,sql-server,Sql,Sql Server,我在数据库中有一个列为DateTime类型的表。 当前,当我需要按此列进行筛选时,我正在使用对英语区域有效的YYYY-MM-DD HH:MM:SS格式与日期进行比较,但如果数据库中用户的默认区域设置为德语,则格式应为yyy-DD-MM HH:MM:SS,并且我的查询失败 在没有指定日期格式的情况下,我没有找到任何将时间戳转换为日期时间的解决方案 此外,我还尝试将DateTime转换为时间戳(以便能够与时间戳值进行比较),但由于某些原因,这不起作用 示例(MS SQL SERVER): 我在一个表
DateTime
类型的表。
当前,当我需要按此列进行筛选时,我正在使用对英语区域有效的YYYY-MM-DD HH:MM:SS
格式与日期进行比较,但如果数据库中用户的默认区域设置为德语,则格式应为yyy-DD-MM HH:MM:SS
,并且我的查询失败
在没有指定日期格式的情况下,我没有找到任何将时间戳转换为日期时间的解决方案
此外,我还尝试将DateTime转换为时间戳(以便能够与时间戳值进行比较),但由于某些原因,这不起作用
示例(MS SQL SERVER):
我在一个表中有两列:
ID | CREATEDDATE
1 | 2017-10-23 10:00:00.000
2 | 2017-10-25 10:00:00.000 如果用户的默认语言设置为英语查询
从CREATEDDATE>'2017-10-24 10:00:00'所在的表格中选择*
返回我的第二行,但如果默认语言设置为德语,则此消息有错误:
<代码>将日期时间日期转换为永久性的日期
我需要一些方法来更改查询,以便不必担心用户默认语言。SQL Server将以下格式的字符串转换为日期/时间,而不管国际化设置如何:
- 日期的YYYYMMDD
秒后允许小数YYYY-MM-DDTHH:MM:SS.SSS
SET DATEFORMAT
或SET LANGUAGE
设置的影响
请注意,尽管我更喜欢YYYY-MM-DD
,但SQL Server确实具有将其解释为YYYY-DD-MM的国际化设置,因此yyyyymmdd更安全。我更喜欢YYYY-MM-DD
,因为它是(也是)ISO标准,在大多数数据库中使用,更容易阅读,而且混淆的风险相对较小
在Oracle中,您可以使用日期
或时间戳
关键字:
用于日期日期'YYYY-MM-DD'
秒后允许使用小数时间戳'YYYY-MM-DD HH:MM:SS'
WHERE CREATEDDATE>“2017-10-23 10:00:00”
您将获得errorAdate
列没有“格式”(不管使用的是什么DBMS-我们仍然不知道),正如我所说的YYYY-MM-DD HH:MM:SS
对于英语语言环境是实际的,如果您设置德语,它将是YYYY-DD-MM HH:MM:SS
检查MSSQLSQLI,我没有告诉您系统语言环境,在中更改用户的默认区域设置后发现问题Database@VitaliiMuzalevskyi . . . 我修正了格式。如果格式正确,它与国际化无关。谢谢大家,这确实是一种奇怪的行为,但是YYYY-MM-DDTHH:MM:SS.SSS
和YYYYMMDD HH:MM:SS
格式工作正常