【问题标题】:SQL server perform date conversion before queryingSQL server 在查询前执行日期转换
【发布时间】:2016-09-23 10:03:38
【问题描述】:

我有一个应用程序以以下格式返回日期:“Thu Sep 22 2016”,我想查询已存储的 sql server 数据库 日期格式为“2016-09-06”。 SQL Server 是否提供任何用于转换的内置函数(特别是 3 字母月份名称到数字)? 请告诉我。

【问题讨论】:

  • w3schools.com/sql/func_convert.asp - 可能有用吗?
  • 在您的应用程序堆栈中,始终在调用时尽早将字符串表示形式转换为 DateTime 实例。在调用时,始终尽可能晚地转换回字符串。理想情况下,两种转换都发生在表示层中。基于此最佳实践,日期时间应存储为实际日期时间,您的应用应将字符串值转换为日期时间,这样在比较类似类型时创建查询变得简单。
  • 感谢您的意见。但不幸的是,我无法控制该应用程序返回日期 - 它基本上是通过执行 zfs 命令获得的日期输出。它由文件系统返回
  • 同一个问题你要问多少次?
  • 抱歉,但另一个问题是根据所需格式转换 shell 脚本中的日期格式并传递给 SQL 服务器,这个旨在检查 sql 服务器查询中的解决方案。多亏了大家的意见,现在我有了两种解决方案,我可以选择最合适的。

标签: sql sql-server tsql date


【解决方案1】:

SQL Server 对日期转换的支持有限。这些在documentation 中有描述。

我认为这是你想要的:

select convert(date, substring(col, 5, 6) + ',' + right(col, 5), 107)

想法是将您的字符串转换为“Sep 22, 2016”,然后将其用于转换。假设您的国际化格式设置为英语,那么这种方法应该可行。

【讨论】:

    【解决方案2】:

    您可以使用FORMAT

    例子:

    DECLARE @d DATETIME = '10/01/2011';  
    SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'  
          ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'  
          ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'  
          ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result';   
    
    SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'  
          ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'  
          ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'  
          ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';  
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT STR_TO_DATE('Sep 22, 2016','%M %d,%Y');
      

      【讨论】:

      • 收到错误“'STR_TO_DATE' 不是可识别的内置函数名称。”
      • 你用的是哪个版本的mysql?
      • @TK 问题说:“SQL server 是否提供任何内置函数进行转换
      【解决方案4】:

      您唯一需要做的就是删除字符串日期格式的星期几部分。删除后,该字符串将采用 SQL Server 的标准日期格式。

      Declare @yourTable table (
          Id int identity(1,1),
          YourDate  datetime2
      )
      
      Insert into @yourTable values 
      ('2016-09-22'),
      ('2016-09-16'),
      ('2016-09-22')
      
      Declare @appDate varchar(100) = 'Thu Sep 22 2016'
      Set @appDate = ltrim(substring(@appDate,4,len(@appDate)-3))
      select * from @yourTable where cast(YourDate as date) = @appDate
      

      我还将表中的日期时间转换为日期,以避免在查询时使用日期时间的时间分量。

      【讨论】:

        猜你喜欢
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多