2012-04-04 7 views
2

では動作しないのはなぜDB2LIKE構造を使用して問題を持っています。たとえば :タイムスタンプでLIKEを使用すると、DB2

FYI
select * from TEST where TIME LIKE '2012-03-04-%' 

。 - TIMETIMESTAMPデータ型です。

LIKETIMESTAMPSを使用する理由はありませんか?

追加情報:選択した明細書でユーザーが指定した日からデータを抽出したい。

+0

タイムスタンプは文字列ではないので、実際に文字列のように扱いたい場合は、文字列にキャストし、必要な形式を指定します。しかし、このタイプの問合せでは、タイムスタンプを他のものにキャストしてネイティブに使用しないでください。このデータ型をネイティブに処理するための関数と構造体がたくさんあります。それらをストリングのように扱いません。 – MatBailie

答えて

7

だけmortbの答え@上の拡大、私はcastsLIKEを使用して意味することBETWEENや比較を使用してのBETWEENまたは

WHERE time >= '2012-03-04' AND time < '2012-03-05' 

利点を使用したいのいずれかを使用することをtimeにインデックスがある場合それは鋳造のために使用することができないであろう。

+0

+1:連続値で 'BETWEEN'を使用しないためです。関数内の検索フィールドを隠さないため。また、 'TIMESTAMP'を扱うために文字列操作を使用しないためです。なぜ人々はすべてが文字列だと思うのですか? – MatBailie

+0

私は最初に日付の周りに ''(引用符)を追加したときに混乱が始まったと思います。アクセスデータベース用にSQLを記述するときは、通常の文字列リテラルではなく、#(#2012-04-04#)で日付を囲むことができます。それはもっと明白なようです。 – mortb

+0

@mortb - 日付の前後に引用符はありません。あなたのクエリでは、2つの文字列定数があります。 'TIMESTAMP> = STRING'は不可能なので、他のデータ型を暗黙的に*他のものにキャストする必要があります。データ型の確からしさの順序に基づいて、文字列はTIMESTAMPに暗黙的にキャストされます。まるでCAST()関数を自分で使ったかのように。 – MatBailie

3

LIKEは、string(char、varchar)データ型用です。 WHERE time BETWEEN '2012-03-04' AND '2012-03-04 23:59:59.998'

+0

あなたの提案に「2012-03-05」の1秒が含まれていますが、これは予期しないでしょう – zerkms

+0

たぶん「2012-03-04」と「2012-04-04 23:59:59.998」の間にどこが良いでしょうか? – mortb

+2

@mortb:いいえ、detail-to-detailの答えはbeny23が提供するものです。 –

0

このように使用できますto_date( '2016-06-17 00:00:00'、 'yyyy-mm-dd HH24:MI:SS')とto_date( '2016-06-18 00:00:00 '、' yyyy-mm-dd HH24:MI:SS ')

関連する問題