web-dev-qa-db-ja.com

NULL日時を空白に変換する

日付がNULLの場合に空白またはメッセージを表示できるように、日時フィールドをvarcharに変換したいと思います。これは私がこれまでに持っているものです:

select
isnull(us.Date,0) as USDate,
isnull(au.Date,0) as AUDate
from ustable us
left join autable au
on us.column=au.column

現在、これは次のことを示しています。

USDATE 
2014-10-24 10:29:07.450
1900-01-01 00:00:00.000

「1900-01-0100:00:00.000」varcharを作成して、メッセージを書き込んだり、真の空白を表示したりできるようにしたいと思います。

5
Emily

Case AND CONVERTを次のように使用できます-

SELECT
CASE WHEN us.Date IS NULL THEN '' ELSE CONVERT(VARCHAR(30), us.Date, 121) END AS USDate,
CASE WHEN au.Date IS NULL THEN '' ELSE CONVERT(VARCHAR(30), au.Date, 121) END AS AUDate
FROM ustable us
left join autable au
on us.column=au.column
6
Krishnraj Rana

あなたが達成しようとしていることについて私が見つけた最も単純なコード行は次のとおりです。

ISNULL(CONVERT(VARCHAR(30),us.Date,121),'') as USDate,
ISNULL(CONVERT(VARCHAR(30),au.Date,121),'') as AUDate,

私はこれをテストし、それが機能することを確認しました。

2
Lewis

NVL()関数を使用できます...

NVL関数を使用して、NULLと評価される式を指定した値に変換できます。 NVL関数は、2つの引数を受け入れます。最初の引数は、評価される式の名前を取ります。 2番目の引数は、最初の引数がNULLと評価されたときに関数が返す値を指定します。最初の引数がNULLと評価されない場合、関数は最初の引数の値を返します。

例えば:

select
nvl(us.Date,'') as USDate,
nvl(au.Date,'') as AUDate
from ustable us
left join autable au
on us.column=au.column

または、デフォルトとして必要なものを入力します。

select
nvl(us.Date,'this was a NULL') as USDate,
nvl(au.Date,'this was a NULL') as AUDate
from ustable us
left join autable au
on us.column=au.column
1
kttii

次のように定義された列があるとします。

date_of_birth datetime null

あなたは簡単に言うことができます

select date_of_birth = coalesce( convert(varchar(32),date_of_birth) , '' )
from some_table_with_a_nullable_datetime_column
1
Nicholas Carey

SQLでそれを行うには:

SELECTステートメントを変更してWHEN...THEN句を組み込みます。

CASE us.Date 
  WHEN '1900-01-01 00:00:00.000' THEN ''
  WHEN NULL THEN ''
  ELSE us.Date
END as USDate,
CASE au.Date 
  WHEN '1900-01-01 00:00:00.000' THEN ''
  WHEN NULL THEN ''
  ELSE au.Date
END as AUDate

フロントエンドコードがある場合は、SQLコードを変更せずにフロントエンドに機能を実装するだけで済みます。

1
Alex W
select null USDate, NUll AUDate
from ustable us
left join autable au on us.column=au.column

試してみると、列の値がnullであることが示されます。

このようなものを試してください...

select
CONVERT(varchar(50), isnull(us.Date,0)) as USDate,
CONVERT(varchar(50), isnull(au.Date,0)) as AUDate
from ustable us
left join autable au
on us.column=au.column

日付形式に応じて、varcharのサイズを変更することをお勧めします。また、CONVERTは、文字列の形式を変更できる3番目のパラメーターを取ります。

0
DeadZone