SQL字段将日期更改格式添加到YYYYMMDD

时间:2014-11-11 02:34:30

标签: sql datefield

我有一个日期字段包含年份和月份。字段名称new_TarikhSebenarTamatPengajian。数据的例子199110(格式:YYYYMM)。我想添加日期来设置新的格式要求是(YYYYMMDD)。 对于可用数据,我可以在该月的月末之后添加日期。 实施例199101 = 19910130或199102 = 19910228 OR 199103 = 19910231

此代码对我不起作用

  

选择DMSTAG.dbo.TEMP_AKAUN_MARA.new_TarikhSebenarTamatPengajian       案件           什么时候(new_TarikhSebenarTamatPengajian,2)= 01那么CONCAT(new_TarikhSebenarTamatPengajian,31)           什么时候(new_TarikhSebenarTamatPengajian,2)= 02 THEN CONCAT(new_TarikhSebenarTamatPengajian,28)           正确的时候(new_TarikhSebenarTamatPengajian,2)= 03那么CONCAT(new_TarikhSebenarTamatPengajian,31)
          什么时候(new_TarikhSebenarTamatPengajian,2)= 04那么CONCAT(new_TarikhSebenarTamatPengajian,30)什么时候   右(new_TarikhSebenarTamatPengajian,2)= 05那么   CONCAT(new_TarikhSebenarTamatPengajian,31)WHEN   右(new_TarikhSebenarTamatPengajian,2)= 06那么   CONCAT(new_TarikhSebenarTamatPengajian,30)WHEN   右(new_TarikhSebenarTamatPengajian,2)= 07那么   CONCAT(new_TarikhSebenarTamatPengajian,31)WHEN   右(new_TarikhSebenarTamatPengajian,2)= 08那么   CONCAT(new_TarikhSebenarTamatPengajian,31)WHEN   右(new_TarikhSebenarTamatPengajian,2)= 09那么   CONCAT(new_TarikhSebenarTamatPengajian,30)WHEN   右(new_TarikhSebenarTamatPengajian,2)= 10那么   CONCAT(new_TarikhSebenarTamatPengajian,31)WHEN   右(new_TarikhSebenarTamatPengajian,2)= 11那么   CONCAT(new_TarikhSebenarTamatPengajian,30)WHEN   右(new_TarikhSebenarTamatPengajian,2)= 12那么   CONCAT(new_TarikhSebenarTamatPengajian,31)
      结束新日期来自[dbo]。[TEMP_AKAUN_MARA]

3 个答案:

答案 0 :(得分:1)

假设你的列名是DateWithOutMonth:

Select Convert(nvarchar(8), Dateadd(day, -1, Dateadd(month, 1, Convert(datetime, DateWithOutMonth + '01'))) , 112) 
from your table 

代码解释:

  • 首先,将01添加到日期值的末尾,因此该值始终是一个月的开头
  • 将值转换为日期时间类型
  • 在新转换的值中添加1个月
  • 减去新增值的一天 - >我们有月末的结束日期

答案 1 :(得分:0)

您只需执行此操作即可实现功能。

我希望这会对你有所帮助

    SELECT   
      CASE
        WHEN CRSE_DATE = '199101' THEN '19910130'
        WHEN CRSE_DATE = '199102' THEN '19910228'
        WHEN CRSE_DATE = '199103' THEN '19910231'
      END 
    FROM 
    table_name  

答案 2 :(得分:0)

试试这个:

SELECT id,crse_date,
    CASE 
        WHEN RIGHT(crse_date,2) = 01 THEN CONCAT(crse_date,31)
        WHEN RIGHT(crse_date,2) = 02 THEN CONCAT(crse_date,28)
        WHEN RIGHT(crse_date,2) = 03 THEN CONCAT(crse_date,31)   
        WHEN RIGHT(crse_date,2) = 04 THEN CONCAT(crse_date,30)       
    END AS newdate
 FROM yourtable


After you alter your table. Here is new query for your problem
Takenote : your field name is not advisable

SELECT new_TarikhSebenarTamatPengajian, 
    CASE
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 01 THEN CONCAT(new_TarikhSebenarTamatPengajian,31)
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 02 THEN CONCAT(new_TarikhSebenarTamatPengajian,28) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 03 THEN CONCAT(new_TarikhSebenarTamatPengajian,31)
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 04 THEN CONCAT(new_TarikhSebenarTamatPengajian,30) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 05 THEN CONCAT(new_TarikhSebenarTamatPengajian,31) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 06 THEN CONCAT(new_TarikhSebenarTamatPengajian,30) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 07 THEN CONCAT(new_TarikhSebenarTamatPengajian,31) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 08 THEN CONCAT(new_TarikhSebenarTamatPengajian,31) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 09 THEN CONCAT(new_TarikhSebenarTamatPengajian,30) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 10 THEN CONCAT(new_TarikhSebenarTamatPengajian,31) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 11 THEN CONCAT(new_TarikhSebenarTamatPengajian,30) 
    WHEN RIGHT(new_TarikhSebenarTamatPengajian,2) = 12 THEN CONCAT(new_TarikhSebenarTamatPengajian,31)
    END AS newdate 
FROM TEMP_AKAUN_MARA