Parse a date from unformatted text in SQL

前端 未结 4 1499
执笔经年
执笔经年 2020-12-11 02:44

I\'m trying to figure out an elegant way to get a date from a text column that has data like this \"YYYYMMDD\"...so we might see \"20060508\" as a value in the column, which

相关标签:
4条回答
  • 2020-12-11 03:30
    select cast('20060508' as datetime) AS MyDate
    

    gives you this result...

    MyDate
    -----------------------
    2006-05-08 00:00:00.000
    

    See here for more information on casting & converting in MS SQL.

    If you're trying to achieve a specific format (May 8, 2006) - you should consider just returning the column as a datetime value, and letting whatever is going to display that value to the end user (website, client app, report, etc) do the formatting. If you format it at the query, you'll be returning a string, which will make it harder to swap out formats from your front end in the future. If you want to do it in SQL - check out format 107 in the link above.

    0 讨论(0)
  • 2020-12-11 03:34

    No sweat, just CONVERT it. Style "112", or ISO would handle your example case.

    SELECT CONVERT(datetime,'20060508',112)
    

    returns

     ----------------------- 2006-05-08 00:00:00.000
    
     (1 row(s) affected)
    
    0 讨论(0)
  • 2020-12-11 03:43

    try:

    SELECT REPLACE(CONVERT(varchar(30),CONVERT(datetime, '20060508'),107),' 0',' ')
    

    output:

    -------------------
    May 8, 2006
    
    (1 row(s) affected)
    
    0 讨论(0)
  • 2020-12-11 03:50

    This is already a valid date - ISO-8601 format - just use:

    SELECT CAST('20060508' AS DATETIME)
    

    or alternatively:

    SELECT CONVERT(DATETIME, '20060508', 112)
    

    and that should do just fine!

    In order to get your "May 08, 2006" display, do another convert into varchar, using the date convert style 107:

    SELECT CONVERT(VARCHAR(25), CAST('2006-05-08' AS DATETIME), 107)
    

    See here for more information on casting & converting in MS SQL

    0 讨论(0)
提交回复
热议问题