【问题标题】:Delphi7: Get SQL server system Date and Time formatDelphi7:获取SQL server系统日期时间格式
【发布时间】:2017-08-31 04:46:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • 不,查询应该包含可绑定参数而不是文本值。
  • 我用 delphi 编写的代码设置了 MSSQL 的默认格式。这会将服务器的区域日期格式转换为 MSSQL 日期格式。
  • 我仍然缺少使用文本值进行操作的真正原因。为什么要构建以文本表示的日期和时间值的 SQL 命令?
  • 为什么不使用参数进行查询,日期时间的格式根本不重要。另请阅读karaszi.com/SQLServer/info_datetime.asp#DtFormatsInput

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


【解决方案1】:

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

你让自己变得困难。
您构建的查询根本不需要关心您的客户端机器或 sql 服务器的区域格式是如何设置的。
无论任何区域设置如何,sql server 都会始终理解语言中立的格式。

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

因此,当您真的想以文本形式构建查询时,请
"YYYYMMDD" 用于日期,"YYYYMMDD hh:mm:ss" ex('20170831 14:23:05') 用于日期时间。
现在您不必再关心格式了。

最好在查询中使用参数。

【讨论】:

    【解决方案2】:

    在我看来,您应该知道您的客户端服务器有一个标准格式,如果它是标准格式,那么将您的日期设置为不同的变量,即不是单一的文本/数字格式“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)
    

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

    【讨论】:

    • 我们在不同的地理位置拥有不同的客户。它不是我们会得到的单一日期格式。
    • 使用相同的方法,您可以根据日期的位置和格式分离查询。
    • 这就是我的主要问题,“如何使用 delphi7 代码获取 SQL Server 的区域日期格式?”
    • 我仍然不明白你为什么需要它。如果您的代码始终使用这种格式“YYYYMMDD”,那么如何设置 sql server 则无关紧要,这是任何 sql server 都能理解的通用格式
    【解决方案3】:

    假设整个区域具有相同的格式,请尝试这样的操作 select * form data where Area="Abc"

    然后搜索“:”或“/”

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

    由于我假设该区域的格式相同,因此我们可以检查 a > 12 和两位数字是否为日期,b 是否为两个数字,

    因此,我假设来自同一个地方的所有输入都具有统一的格式。并检查所有输入,并通过检查是否满足所有条件来获得肯定的答案。

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

    【讨论】:

      【解决方案4】:

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

      convert(varchar,DOB,103) 为“出生日期”

      【讨论】:

      • 我想要的是在运行时获取 SQL Server 的日期格式。这对我没有帮助。
      【解决方案5】:

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

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

      【讨论】:

      • 感谢您的尝试。但这会将日期转换为服务器的区域设置,我想要的是它应该是 SQL 服务器格式的格式。
      • 我已更改答案以从 SQL Server 设置中获取格式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多