2016-09-23 43 views
0

我有一个应用程序以“Thu Sep 22 2016”的格式返回日期,我想查询已存储日期为 的sql服务器数据库,格式为“2016-09- 06" 。 SQL服务器是否提供任何内置的转换功能(特别是3个字母的月份名称到数字)? 请让我知道。SQL服务器在查询前执行日期转换

+0

http://www.w3schools.com/sql/func_convert.asp - 可能有用吗? –

+2

在您的应用程序栈中,调用时总是尽可能早地将字符串表示转换为DateTime实例。调用时总是尽可能晚地转换回字符串。理想情况下,两种转换都发生在表示层中。基于这种最佳做法,日期时间应该作为实际日期时间存储,您的应用程序应该已将您的字符串值转换为日期时间,这使得创建查询变得简单,因为您正在比较类型。 – Igor

+0

感谢您的意见。但不幸的是,我无法控制该应用程序返回日期 - 它基本上是通过执行zfs命令获得的日期输出。它由文件系统返回 – user2306856

回答

0

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

我想这你想要做什么:

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

的想法是你的字符串转换为“2016年9月22日”,然后用这个转换。假设您的国际化格式设置为英文,那么这种方法应该可行。

0

您可以使用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'; 
0

试试这个:

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

获取错误“STR_TO_DATE”不是公认的内置函数名称。 “ – user2306856

+0

你正在使用哪个版本的mysql? –

+1

@TK问题说:“* ** SQL服务器**是否提供任何内置函数进行转换*” –

0

你要做的唯一一件事情就是删除您的字符串的一周部分的一天日期格式。一旦删除了该字符串,它就是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 

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

+0

谢谢..这有帮助! – user2306856