使用SQL从mmddyyyy转换为yyyymmdd

时间:2018-10-11 16:07:08

标签: sql sql-server

我应该以说我对SQL(或任何涉及数据库的编程)非常新作为我的问题的开头。几周前,当我决定参加一个数据项目时,我开始学习SQL。

我一直在使用SSMS处理以逗号分隔的文本文件格式的大表。我需要能够按日期排序,当前的格式是mmddyyyy,但是当我尝试按日期排序时,它不起作用。

我知道转换日期在这里引起了很多询问,但是我还没有找到能为像我这样的新生代解释问题的解决方案。

到目前为止,我对解决方案的猜测是使用CONVERT或CAST解决方案,但是我不确定这是否是正确的方法。我发现了几则CAST / CONVERT帖子,但都没有真正适用于我的情况。

我不想把这作为我的第一个问题,但是我认为如果我能解决这个问题,我会接受一些否决权。谢谢。

我想做的事的例子:

SELECT *    
  FROM [databasename].[dbo].[table1]    
 WHERE [ column1] > 01012017;

我拿回了整张桌子,没有排序。

2 个答案:

答案 0 :(得分:1)

自您:

SELECT *    
  FROM [databasename].[dbo].[table1]    
 WHERE [ column1] > 01012017;

不会出错,我们可以说[column1]的数据类型是字符类型(例如VARCHAR,char)或日期时间。

由于您要取回所有数据,并且我认为将来没有数据,因此应该使用varchar(或char)-日期时间表示1900-01-01 + 1012017天。

要使其成为日期时间,您需要先将其转换为yyyymmdd样式(可以在任何日期和语言设置下使用),以“铸造” mmddyyyy格式的column1:

cast(right([column1],4)+substring([column1],1,2)+substring([column1],3,2) as datetime)

,您将01012017写为字符串(用引号引起来),并再次以yyyymmdd格式(将其隐式转换为日期时间):

'20170101'

因此您的SQL变为:

SELECT *    
  FROM [databasename].[dbo].[table1]    
 WHERE cast(right([column1],4) + 
            substring([column1],1,2) + 
            substring([column1],3,2) as datetime) > '20170101';

具有一个date \ datetime列作为varchar并像这样使用将使您能够使用简单索引,但这是另一回事。现在,这将返回您想要的数据。

答案 1 :(得分:0)

假设您列的数据类型为[日期],请尝试类似的操作:

SELECT *
FROM [databasename].[dbo].[table1]
WHERE FORMAT([column1],'dd/MM/yyyy') >'01012017'

如果是字符串格式,则必须使用CONVERT()通过类似的查询将列转换为Date

SELECT *
FROM [databasename].[dbo].[table1]
WHERE CONVERT(NVARCHAR(10), [Column1], 112) >'01012017'

如果您需要有关CONVERT子句的更多帮助,请参考this W3Schools article

相关问题