2014-11-11 3 views
0

У меня есть одно поле для даты содержит год и месяцы. Имя поля new_TarikhSebenarTamatPengajian. Пример данных 199110 (Формат: ГГГГММ). Я хочу добавить дату для установки нового требуемого формата (YYYYMMDD). Доступные данные Могу ли я добавить дату, следующую за месяцем месяца. Пример 199101 = 19910130 ИЛИ 199102 = 19910228 ИЛИ 199103 = 19910231Формат изменения даты в поле SQL для YYYYMMDD

Этот код не работает для меня

ВЫБОР DMSTAG.dbo.TEMP_AKAUN_MARA.new_TarikhSebenarTamatPengajian ПРИМЕР Когда правый (new_TarikhSebenarTamatPengajian, 2) = 01 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 31) Когда правый (new_TarikhSebenarTamatPengajian, 2) = 02 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 28) Когда правый (new_TarikhSebenarTamatPengajian, 2) = 03 THEN CONCAT (new_TarikhSebenarTamatPengajian, 31)
КОГДА ПРАВЫЙ (new_TarikhSebenarTamatPengajian, 2) = 04 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 30), КОГДА ПРАВЫЙ (new_TarikhSebenarTamatPengajian, 2) = 05 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 31), КОГДА ПРАВЫЙ (new_TarikhSebenarTamatPengajian, 2) = 06 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 30) ПРИ ПРАВЫЙ (new_TarikhSebenarTamatPengajian, 2) = 07 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 31), КОГДА ПРАВЫЙ (new_TarikhSebenarTamatPengajian, 2) = 08 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 31), КОГДА ПРАВЫЙ (new_TarikhSebenarTamatPengajian, 2) = 09 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 30) КОГДА ПРАВО (new_TarikhSebenarTamatPengajian, 2) = 10 ТОГДА CONCAT (new_TarikhSebenarTamatPengajian, 31), КОГДА ПРАВЫЙ (new_TarikhSebenarTamatPengajian, 2) = 11 Тогда CONCAT (new_TarikhSebenarTamatPengajian, 30), КОГДА ПРАВЫЙ (new_TarikhSebenarTamatPengajian, 2) = 12 Тогда CONCAT (new_TarikhSebenarTamatPengajian, 31)
END AS newdate ОТ [dbo]. [TEMP_AKAUN_MARA]

+0

Какова схема вашего стола? –

+0

Это не поля даты, это текстовые поля. Вам будет полезно исправить вашу схему и ввести поля даты полей даты. –

+0

@MUHD MAN, пожалуйста, обновите мой ответ – Edrich

ответ

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 
+0

Я попробовал, но не работал Неправильный синтаксис рядом с ключевым словом «CASE». –

+0

Я пробовал этот код в моем mysql, и он отлично работает, могу ли я узнать ваши точные столбцы в таблице? – Edrich

+0

Таблица: dbo.TEMP_AKAUN_MARA Поле: new_TarikhSebenarTamatPengajian –

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 
1

Предполагая, что ваше имя столбца DateWithOutMonth:

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

Код пояснил:

  • первый, добавьте 01 до конца вашей даты значения, так что значение всегда будет начало месяца
  • преобразовать значение даты типа времени
  • добавить 1 месяц в новообращенном значение
  • минус один день с новой добавленной стоимости -> у нас есть дата окончания месяца
Смежные вопросы