2016-07-13 7 views
0

私は毎月更新する必要がある(また変更する年も必要です)テーブルに日付があります。たとえば、May2015という形式です。更新ステートメントで自動的に更新できる方法はありますか?通常これは難しいことではありませんが、月と年が分割されていないので難しいです。カラムsqlの日付を更新

ありがとうございました。

+3

どのDBMSを使用していますか? –

+6

これは、日付を 'VARCHAR'として保存しないようにする理由です。 – Siyual

+0

@Siyualによれば、すべてのRDBMSには、ネイティブのDate型またはDateTime型のサポートがあります。それらを使用する、彼らは理由のためにそこにいる。さもなければ、すべてが文字列として永続化されている場合でも、型システムを持っているという点は何ですか? – Igor

答えて

-1

遅すぎる場合は、文字列の代わりにDATEまたはDATETIMEを使用するようにスキーマを変更する必要があります。遅すぎる場合は、DBの各行を照会し、日付解析ライブラリを使用してDATEまたはDATETIMEに解析し、その行のDATEまたはDATETIMEの新しい列を更新する移行を作成する必要があります。

0

テーブルを変更できないと仮定すると、毎月の最初の日付をDATETIME形式にすることができます。そして、あなたはあなたが必要とするものに更新するために、この同じロジックを使用することができます

Click for DEMO

IF OBJECT_ID('tempdb..#tempTable') IS NOT NULL DROP TABLE #tempTable 
create table #tempTable(
    vDate varchar(50) 
) 
insert into #tempTable (vDate) values 
('May2015'), 
('March2016'), 
('August2014') 

select 
    cast( 
    case 
     when left(vDate,len(vDate) - 4) = 'January' then '01' 
     when left(vDate,len(vDate) - 4) = 'February' then '02' 
     when left(vDate,len(vDate) - 4) = 'March' then '03' 
     when left(vDate,len(vDate) - 4) = 'April' then '04' 
     when left(vDate,len(vDate) - 4) = 'May' then '05' 
     when left(vDate,len(vDate) - 4) = 'June' then '06' 
     when left(vDate,len(vDate) - 4) = 'July' then '07' 
     when left(vDate,len(vDate) - 4) = 'August' then '08' 
     when left(vDate,len(vDate) - 4) = 'September' then '09' 
     when left(vDate,len(vDate) - 4) = 'October' then '10' 
     when left(vDate,len(vDate) - 4) = 'November' then '11' 
     when left(vDate,len(vDate) - 4) = 'December' then '12' 
    end + '/01/' + right(vDate,4) as date) 
from 
    #tempTable 

:ここではどのように例があります。

0

これは、currentdate関数を使用して文字列を調整しようとしている古いAccess DBです。私はUPDATE "fieldname"を使用したいと思っていますが、それはスペルアウトされた月に残っている必要があります。これまでのベストプラクティスはそれほどわかりませんが、私が手に入れたものです。

+0

答えとしてではなく、これをあなたの質問にコメントとして追加してください。そうすれば、他の人に通知が表示されます。私はまたあなたのデータベースだと言ったのであなたの質問にアクセスしてタグ付けしました。うまくいけば誰かが助けることができます! – scsimon

関連する問題