Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果用户默认语言未知,则SQL查询DateTime值_Sql_Sql Server - Fatal编程技术网

如果用户默认语言未知,则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
    秒后允许小数
这些格式非常具体,但独立于国际化,如中所述:

使用ISO 8601格式的优点是它是一种 具有明确规范的国际标准。还有这个 格式不受
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'
    秒后允许使用小数

我删除了不兼容的数据库标记。仅使用正在使用的数据库标记。Oracle和SQL Server完全不同。最好始终签入“yyyy-mm-dd”format@DmitrijKultasev问题在于,列中的数据具有“yyyy-mm-dd”格式,但在更改数据库中使用的默认语言后,您将尝试使用以下过滤器进行搜索:
WHERE CREATEDDATE>“2017-10-23 10:00:00”
您将获得errorA
date
列没有“格式”(不管使用的是什么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
格式工作正常