1

'12B17T'正確に表す文字列がありますYYMDDAA無関係な属性です)。数か月間、1-91月から9月に使用されます。A-C10月、11月、12月に使用されます

このサイズstringは固定されています(たとえば、日付が2012年1月1日の場合、次のようになります'12101T'

17.11.2012SQLを使用してこのようなものを取得するにはどうすればよいですか?

4

4 に答える 4

2

これは見苦しい方法かもしれませんが、クエリで呼び出してデータを変換できる関数を作成します。

create function TransformDate(@myString varchar(6))
returns datetime
as
begin

  return cast('20'+left(@myString, 2) +'-'
    + case substring(@mystring, 3, 1)
        when '1' then '01'
        when '2' then '02'
        when '3' then '03'
        when '4' then '04'
        when '5' then '05'
        when '6' then '06'
        when '7' then '07'
        when '8' then '09'
        when '9' then '09'
        when 'A' then '10'
        when 'B' then '11'
        when 'C' then '12' end +'-'
    + substring(@mystring, 4, 2) as datetime)

end

次に、次のように使用できます。

declare @value varchar(6) = '12B17T'

select dbo.transformdate(@value) as dt

デモで SQL Fiddle を参照してください

その結果、次のようになります。

|         DT |
--------------
| 2012-11-17 |
于 2012-12-17T10:16:31.927 に答える
2

これを試して;

DECLARE @x varchar(50)= '12B17T' 
SELECT  SUBSTRING(@x,4,2) +'-'+ 
   RIGHT( '0' + CASE SUBSTRING(@x,3,1) WHEN 'A' THEN '10'
                          WHEN 'B' THEN '11'
                          WHEN 'C' THEN '12' 
   ELSE SUBSTRING(@x,3,1) END, 2) +'-'+ 
   '20' + SUBSTRING(@x,1,2)

SQLデモフィドルはこちら

--Results 17-11-2012        
于 2012-12-17T10:17:11.170 に答える
0

サーバーがこの形式で月を認識している場合は、次を試すことができます。

SELECT TO_CHAR(t_date,'YYYY.MM.DD') FROM (SELECT TO_DATE(some_date,'YYMMDD') AS t_date FROM some_date_table);

そうでない場合は、CASE または DECODE を使用する必要があります。

SELECT dt_year||'.'||dt_month||'.'||dt_day AS date_ FROM
  (SELECT 
     CASE 
      WHEN SUBSTR(some_date,1,2) BETWEEN 0 AND 12 THEN 20||SUBSTR(some_date,1,2)
      WHEN SUBSTR(some_date,1,2) BETWEEN 13 AND 99 THEN 19||SUBSTR(some_date,1,2)
     END AS dt_year,
     CASE 
      WHEN SUBSTR(some_date,3,1) IN('1','2','3','4','5','6','7','8','9') THEN 0||SUBSTR(some_date,3,1)
      WHEN SUBSTR(some_date,3,1) = 'A' THEN '10'
      WHEN SUBSTR(some_date,3,1) = 'B' THEN '11' 
      WHEN SUBSTR(some_date,3,1) = 'C' THEN '12'
     END AS dt_month,
     SUBSTR(some_date,4,2) AS dt_day FROM some_date_table);
于 2012-12-17T10:37:32.340 に答える
0

colは、文字列を含むテーブルtb3の列です

create table tb3(col varchar(max))
insert into tb3 values('120617T')

declare @tmp varchar(max) 
select @tmp=case 
when substring(col,3,1)='A' then replace(col,'A','10')
when substring(col,3,1)='B' then replace(col,'B','11')
when substring(col,3,1)='C' then replace(col,'C','12') 
when substring(col,3,1)!='0' then replace(col,substring(col,3,1),'0'+substring(col,3,1))
else col end 
from tb3

SELECT CONVERT(VARCHAR(10), convert(datetime,substring(@tmp,1,len(@tmp)-1),109), 104)

出力

17.06.2012

于 2012-12-17T10:46:36.017 に答える