- PR -

CHARとDATETIMEの比較

1
投稿者投稿内容
mimiko
会議室デビュー日: 2008/12/27
投稿数: 4
投稿日時: 2008-12-27 17:41
-- A_DATETIME(DATETIME型) -- B_DATE(DATETIME型) -- C_TIME(CHAR型)--
-------------------------------------------------------------------
-- 2008/12/27 17:13 55 -- 2008/12/27 00:00 00 -- 17:13 55 --
-------------------------------------------------------------------

上記のようなDBがあるのですが、
A_DATETIME(DATETIME型)とB_DATE(DATETIME型)+C_TIME(CHAR型)の条件と合致
するようなデータを抽出したいです。
A_DATETIME(DATETIME型)の 2008/12/27 17:13 55 と
B_DATE(DATETIME型)+C_TIME(CHAR型)を結合した 2008/12/27 + 17:13 55
が合致した場合です。どうしたら良いでしょうか?DBはSQLSERVERです。


イメージとしては以下になります。

SELECT * FROM DB
WHERE
A_DATETIME =(B_DATE + C_TIME)

自分としては
CONVERT(VARCHAR(10),B_DATE,111)+C_TIME で文字列に
変換し、文字列同士で比較しようと考えましたが、
何か他に良い方法はありますでしょうか?
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-12-28 10:57
少し不明な点があるので教えてください。
  • A_DATETIME を比較時に文字列に変換するようですが、どのように変換しようと考えていますか?
  • B_DATE の時刻部分は必ず 00:00:00 なので B_DATE は年月日のみが有効で時刻は一切関係ないということで良いでしょうか?
  • C_TIME は「17:13 55」という形式で「17:13:55」という形式ではないという事で良いでしょうか?
mimiko
会議室デビュー日: 2008/12/27
投稿数: 4
投稿日時: 2008-12-28 15:00
Kingさん 
ご返答ありがとうございます。
<A_DATETIME を比較時に文字列に変換するようですが、どのように変換しようと考えて<いますか?
まだ、試していないのですが、CONVERTを駆使して出来るのでは
ないのかなと考えています。

<B_DATE の時刻部分は必ず 00:00:00 なので B_DATE は年月日のみが有効で時刻は一切<関係ないということで良いでしょうか?
はい。その通りです。

<C_TIME は「17:13 55」という形式で「17:13:55」という形式ではないという事で良い<でしょうか?
すいません。こちらは、「17:13:55」という形式でした。


King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-12-28 16:29
そうであれば仰っている方法で私は良いと思いますよ。

コード:
CONVERT(CHAR, A_DATETIME, 111) = CONVERT(CHAR, B_DATE, 111)
AND
CONVERT(CHAR, A_DATETIME, 108) = C_TIME


って方法もあるし速度と可読性、優先される面から色々と試されるのも良いと思います。
mimiko
会議室デビュー日: 2008/12/27
投稿数: 4
投稿日時: 2008-12-29 20:58
Kingさん 
本当にありがとうございました。
できました。
1

スキルアップ/キャリアアップ(JOB@IT)