从日期时间列中提取日期 - SQL Server Compact
Posted
技术标签:
【中文标题】从日期时间列中提取日期 - SQL Server Compact【英文标题】:Extract date from datetime column - 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 做到这一点。
你的返回值是字符串还是日期类型?
【参考方案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]
以上是关于从日期时间列中提取日期 - SQL Server Compact的主要内容,如果未能解决你的问题,请参考以下文章