从日期时间列中提取日期 - 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的主要内容,如果未能解决你的问题,请参考以下文章

从 oracle-sql 中的时间戳日期列中提取日期

SQL Server 查询需要从组中提取数据

Sql Server如何使用date数据类型将日期插入到列中

从熊猫的日期时间列中提取日期和小时[重复]

熊猫从日期范围列中提取开始和结束日期[重复]

SQL Server:从最大日期/最新日期的记录中获取数据