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

时间:2017-08-31 04:46:02

标签: sql sql-server sql-server-2008 delphi delphi-7

我想获得 SQL Server 的区域datetime格式。

我在这里使用 Delphi7 。我的方案如下:

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

  

注意:我有用 delphi7 编写的代码,它设置了默认格式   MSSQL也将读取服务器的区域日期格式。并将服务器的区域日期格式转换为MSSQL日期格式。

5 个答案:

答案 0 :(得分:2)

  

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

你使自己变得困难。
您构建的查询不必关心如何设置客户端计算机或sql server的区域格式。
无论区域设置如何,sql server都会始终了解语言中性格式。

您可以在http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

找到它们

所以当你真的想在文本中构建查询而不是使用
"YYYYMMDD"表示日期,"YYYYMMDD hh:mm:ss" ex(' 20170831 14:23:05')表示日期时间。
现在你不再需要关心格式了。

最好是在您的查询中使用参数。

答案 1 :(得分:0)

在我看来,你应该做的是了解客户服务器的标准格式,如果是标准格式,那么请用不同的变量来表示日期,即不是单个文本/数字格式& #34; YYYYMMDD&#34 ;.每个使用不同的变量。并通过阅读格式将它们相互匹配。

如果以上是您的问题,请尝试此操作。

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

(此日期为客户格式)

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

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

答案 2 :(得分:0)

尝试这样的假设整个区域具有相同的格式 选择*表格数据,其中Area =" Abc"

然后搜索":"或" /"

现在制作一个由"分隔的文本子字符串:"或" /"并获得a,b和c变量。

由于我假设该区域的格式相同,我们可以检查是否> 12和两位数则则是日期,b是两个数字并且<然后12个月,如果c有四位数,那么它是一年。 你可能会想,如果我们那么01/01/2001然后呢?

因此,我假设来自同一地点的所有企业都有统一的格式。并检查所有企业并通过检查是否满足所有条件来获得确定的答案。

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

在Query中尝试这样的事情:

将(varchar,DOB,103)转换为“出生日期”