Delphi7:获取SQL服务器系统日期和时间格式

Delphi7: Get SQL server system Date and Time format

我想为 SQL 服务器.

获取区域 datetime 格式

我这里用的是Delphi7。我的场景如下:

如果我的服务器的区域日期格式是(例如)yyyymmdd 并且客户端的 SQL 服务器具有 mm/dd/yyyy(或任何其他有效的日期格式),那么生成的查询应该包含正确的日期格式。

Note: I have code written in delphi7 which set default format for MSSQL and will read server's regional date format too. And will convert the server's regional date format to MSSQL date format.

在我看来,你应该做的是了解你的客户服务器有一个标准格式,如果它是标准的,那么用不同的变量来设置你的日期,即不是单一的 text/number 格式"yyyymmdd".为每个使用不同的变量。并通过阅读格式将它们相互匹配。

如果以上是你的问题,那么试试这个。

select SUBSTRING(Date,0,CHARINDEX('/',Date,0)) as Splitted    

(此日期为客户格式)

Month=SUBSTRING(Date,0,2)
Date=SUBSTRING(Date,3,2)
Year=SUBSTRING(Date,6,4)

然后以您想要的任何格式显示日期。

假设整个区域具有相同的格式,请尝试类似的操作 select * 表单数据 where Area="Abc"

然后搜索“:”或“/”

现在制作一个由“:”或“/”分隔的文本子串,并获取 a、b 和 c 变量。

由于我假设相同的格式覆盖区域,我们可以检查 a > 12 和两位数是否是日期,b 是两位数和 < 12 那么是月份,如果 c 是四位数字那么它是年份. 您可能会想,如果我们然后 01/01/2001 那么会怎样?

因此我假设来自同一位置的所有条目都具有统一的格式。并通过检查是否满足所有条件来检查所有条目并获得确定的答案。

如果您处理实时类型的数据库,则按今天的日期进行比较。

此查询returns您当前会话使用的日期格式(@@language 指向其语言设置)

Select DateFormat 
From   sys.syslanguages 
Where  name = @@Language

在查询中尝试这样的事情:

将(varchar、DOB、103)转换为'Date of Birth'

If my server's regional date format is (e.g.) yyyymmdd and client's SQL server is having mm/dd/yyyy (or any other valid date format) than query generated should contain proper date format.

你给自己添麻烦了。
您构建的查询根本不必关心您的客户端计算机或 sql 服务器的区域格式是如何设置的。
无论区域设置如何,sql 服务器总是可以理解的语言中性格式。

你可以在这里找到它们http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

因此,如果您真的想在文本中构建查询而不是使用
"YYYYMMDD" 表示日期,"YYYYMMDD hh:mm:ss" ex('20170831 14:23:05') 表示日期时间。
现在您不必再关心格式了。

最好在查询中使用参数。