【问题标题】:Extract date from datetime column - SQL Server Compact从日期时间列中提取日期 - SQL Server Compact
【发布时间】:2016-09-04 13:14:44
【问题描述】:

我使用的是 SQL Server Compact 4.0 版本,虽然在 google 中找到它似乎很简单,但我尝试过的示例都不起作用。

我的专栏signup_date 是一个DateTime,其值为04-09-2016 09:05:00

到目前为止我尝试过的事情都没有成功:

SELECT FORMAT(signup_date, 'Y-m-d') AS signup_date;
SELECT CONVERT(signup_date, GETDATE()) AS signup_date
SELECT CAST(data_registo, date) AS signup_date

我发现我可以使用DATEPART 函数,但这会迫使我连接这些值,这是正确的路径吗?如果是这样,我如何连接为 Y-m-d?

SELECT DATEPART(month, signup_date)  

【问题讨论】:

  • 你试过convert(date, signup_date)吗?
  • 是的,它检索到错误:The specified data type is not valid. [Data type (if known) = date]
  • 你的意思是你想删除时间部分,只留下一个日期?
  • 我想从我的日期时间列中检索日期。我设法通过 c# 代码做到这一点,但我不能通过 SQL 做到这一点。
  • 你的返回值是字符串还是日期类型?

标签: sql sql-server-ce


【解决方案1】:

SQL Server Compact 没有日期类型。

如果不想看时间,把日期时间值转成字符串:

SELECT CONVERT(nvarchar(10), GETDATE(), 120)

(这已经过测试并且实际上适用于 SQL Server Compact)

【讨论】:

  • 120 带回的比你需要的多,然后 nvarchar(10) 砍掉你不需要的。你可以使用 select convert(nvarchar, getdate(), 23) 代替
【解决方案2】:

您实际上在使用 CAST 函数时处于正轨,只是语法上的一个小错误。在 CAST 函数中,需要有 'as' 即 CAST(data_registo as date)

SELECT CAST(data_registo as date) AS signup_date;

【讨论】:

    【解决方案3】:

    大多数答案都试图实现相同的目标,但对代码的解释还不够

    CONVERT(date, Date_Updated, 120)
    

    此代码使用 mssql 进行转换。第一项“日期”是要返回的数据类型。它可能是“日期时间”、“varchar”等。 第二项“Date_Updated”是要转换的列的名称。 最后一项 '120' 是要返回的日期样式。有多种样式,输入的代码将决定输出。 '120' 代表 YYYY-MM-DD。 希望这会有所帮助

    【讨论】:

      【解决方案4】:

      在 SQL Server 中执行此操作的老式方法可能适用于您的目的:

      select dateadd(day, datediff(day, 0, signup_date), 0)
      

      datediff() 获取自时间 0 以来的天数(以整数形式)。dateadd() 将此数字加回去。

      如果您不喜欢将0 作为日期,您可以将任何有效的日期放在其位置:

      select dateadd(day, datediff(day, '2000-01-01', signup_date), '2000-01-01')
      

      编辑:

      如果您只是不想看到时间,请将日期转换为字符串:

      select convert(nvarchar(10), signup_date, 120)
      

      (我推荐YYYY-MM-DD格式,其他的是available。)

      【讨论】:

      • 时间仍然返回。
      • 您的编辑也不起作用。错误:The specified data type is not valid. [Data type (if known) = varchar]
      【解决方案5】:

      我已经尝试过这个和许多其他解决方案。我想要一个适用于任何 LCID 的通用解决方案。我的解决方案是一些复杂的代码,但它对我来说非常有效。这是一个预订系统,我需要在其中找出谁在特定日期到达。 ArriveDate 是列,d 是我想要的日期。

      SQL = "SELECT * FROM tablename WHERE dateadd(day, datediff(day, 0, 
      ArriveDate), 0)=' " & Format(d, "yyyy-MM-dd") & " ' "
      

      【讨论】:

        【解决方案6】:

        这将只返回原始日期时间类型的日期值。因此,您可以使用输出进行任何比较

        SELECT  convert(datetime, CONVERT(nvarchar(10), GETDATE(), 120)) 
        

        【讨论】:

          【解决方案7】:

          今天刚看到这个问题,我知道有点晚了:)但也许这会有所帮助..,

          select  convert(date,(convert(varchar(20),'04-09-2016 09:05:00')))
          

          【讨论】:

            【解决方案8】:

            选择转换(nvarchar, getdate(), 1) = 09/25/19

            选择转换(nvarchar, getdate(), 2) = 19.09.25

            选择转换(nvarchar, getdate(), 3) = 25/09/19

            选择转换(nvarchar, getdate(), 4) = 25.09.19

            选择转换(nvarchar, getdate(), 5) = 25-09-19

            select convert(nvarchar, getdate(), 6) = 25 Sep 19

            select convert(nvarchar, getdate(), 7) = 19 年 9 月 25 日

            选择转换(nvarchar, getdate(), 10) = 09-25-19

            选择转换(nvarchar, getdate(), 11) = 19/09/25

            选择转换(nvarchar, getdate(), 12) = 190925

            选择转换(nvarchar, getdate(), 23) = 2019-09-25

            选择转换(nvarchar, getdate(), 101) = 09/25/2019

            选择转换(nvarchar, getdate(), 102) = 2019.09.25

            选择转换(nvarchar, getdate(), 103) = 25/09/2019

            选择转换(nvarchar, getdate(), 104) = 25.09.2019

            选择转换(nvarchar, getdate(), 105) = 25-09-2019

            选择转换(nvarchar, getdate(), 106) = 2019 年 9 月 25 日

            选择转换(nvarchar, getdate(), 107) = 2019 年 9 月 25 日

            选择转换(nvarchar,getdate(),110)= 09-25-2019

            选择转换(nvarchar, getdate(), 111) = 2019/09/25

            选择转换(nvarchar, getdate(), 112) = 20190925

            选择转换(nvarchar, getdate(), 8) = 13:48:36

            选择转换(nvarchar, getdate(), 14) = 13:49:48:713

            选择转换(nvarchar, getdate(), 24) = 13:49:57

            选择转换(nvarchar, getdate(), 108) = 13:50:07

            选择转换(nvarchar, getdate(), 114) = 13:50:14:490

            select convert(nvarchar, getdate(), 0) = 2019 年 9 月 25 日下午 1:50

            select convert(nvarchar, getdate(), 9) = 2019 年 9 月 25 日下午 1:50:31:813

            select convert(nvarchar, getdate(), 13) = 2019 年 9 月 25 日 13:50:39:307

            选择转换(nvarchar, getdate(), 20) = 2019-09-25 13:50:49

            选择转换(nvarchar, getdate(), 21) = 2019-09-25 13:50:58.923

            select convert(nvarchar, getdate(), 22) = 09/25/19 1:51:07 PM

            选择转换(nvarchar, getdate(), 25) = 2019-09-25 13:51:14.473

            select convert(nvarchar, getdate(), 100) = 2019 年 9 月 25 日下午 1:51

            select convert(nvarchar, getdate(), 109) = 2019 年 9 月 25 日下午 1:51:32:227

            select convert(nvarchar, getdate(), 113) = 2019 年 9 月 25 日 13:51:38:740

            选择转换(nvarchar, getdate(), 120) = 2019-09-25 13:51:50

            选择转换(nvarchar, getdate(), 121) = 2019-09-25 13:51:57.153

            选择转换(nvarchar, getdate(), 126) = 2019-09-25T13:52:03.627

            【讨论】:

              【解决方案9】:

              使用这个,我遇到了同样的问题

              SELECT CAST(data_registo as date) AS "signup_date"
              

              【讨论】:

              • 你测试过吗? SQL Server CE 没有列出上述数据类型in docs
              【解决方案10】:

              要获取字符串值,请使用CONVERT

              select convert(varchar(10), signup_date, 11)
              

              在这里查看各种格式:

              https://msdn.microsoft.com/en-us/library/ms187928.aspx

              要获得 DATE 并去掉时间,请执行此操作

              Select Cast (signup_date as DATE)
              

              【讨论】:

              • 所有解决方案都不起作用。错误:The specified data type is not valid. [Data type (if known) = DATE]
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-28
              • 1970-01-01
              • 2019-05-08
              • 1970-01-01
              • 2014-11-20
              相关资源
              最近更新 更多