2017-02-09 8 views
1

を追加するなど、テーブルの値を表示することは可能です「 - 」表示列の値

201602 
201732 
201853 

希望する値があるべきとして例えば

たちが列値を持つ

2016-02 
2017-32 
2018-53 

in sql

+0

データは常にすることができます同じ形式を持っている場合部分文字列と連結を結合します。 – jarlh

+0

ようこそスタックオーバーフロー。 [コードサンプル '{}'](https://i.imgur.com/3ppJhiE.png)ツールバーのボタンでソースコードを書式設定することができます。今回はあなたのために行いました。 –

+0

これは文字列か数字ですか? – dnoeth

答えて

3
select substr(col,1,4)||'-'||substr(col,5) from my_table 
0

カラムt ypeが数値の場合は、MOD演算子を使用できます。

クエリは次のようになります。

あなたはまた、4桁と2桁のパターンで値を分割して参照をバック使用して、値は常に正確に6桁の数字であると仮定すると、正規表現を使用することができ
select int(col/100)||'-'||mod(col,100) from my_table 
+0

"INT":無効なID – user1213199

+0

@ user1213199 - 'int()'の代わりに 'trunc()'を使います。 mod'dの値は0で埋められる必要があります。最初の値は '2016-2' –

0

with mytable (value) as (
    select 201602 from dual 
    union all select 201732 from dual 
    union all select 201853 from dual 
) 
select value, regexp_replace(value, '(\d{4})(\d{2})', '\1-\2') as new_value 
from mytable; 

    VALUE NEW_VALUE      
---------- ------------------------------ 
    201602 2016-02      
    201732 2017-32      
    201853 2018-53      

を使用すると、多くのデータを効率的に使用できます。暗黙的に数値を文字列に変換しています。それを明示的に行うことは本当に必要ではないが、明確にするために望ましいかもしれない。

より長い値を使用できる場合、これは4番目の文字の後にダッシュを入れるため、1234567は1234-567と表示されます。最後の2桁を常に区切りたい場合は、代わりに$アンカーを使用してパターン'(\d{4})(\d{2})$'を使用できます。あなたが最初のグループのサイズを省略することができます短い値に対処するには:

with mytable (value) as (
    select 201602 from dual 
    union all select 201732 from dual 
    union all select 201853 from dual 
    union all select 12 from dual 
    union all select 123 from dual 
    union all select 1234 from dual 
    union all select 1234567 from dual 
) 
select value, regexp_replace(value, '(\d+)(\d{2})$', '\1-\2') as new_value 
from mytable; 

    VALUE NEW_VALUE      
---------- ------------------------------ 
    201602 2016-02      
    201732 2017-32      
    201853 2018-53      
     12 12        
     123 1-23       
     1234 12-34       
    1234567 12345-67      
0

使用演算子' || 'この連結あなたの選択。

例:

SELECT 'TEST' || '-' || 'MY' || '-' || 'QUERY' FROM DUAL;