0

日時が割り当てられていない場合に、すべての日付と時刻を選択できる文字列を置き換えたい SQL クエリを作成したいと考えています。

実際の仕組み:

    SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP'
 and `entry_datetime` between '2013-03-13 22:20:18' and '2013-03-13 22:20:26' 

私の疑問: PHP が日付の値を from と to に取得しないが、AND 条件を削除してクエリを変更したくないが、日付と時刻の間の何かを置き換えたい場合でも、クエリを実行する必要があります:

    SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP' and 
`entry_datetime` between ' ' and ' '

次のことを試しましたが、うまくいきませんか?このようなクエリを記述できますか?

    SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP' and 
`entry_datetime` between '%%' and '%%'

LIKEコマンドで使用しているので、上記のように試してみましたか?どんなアドバイスもとても役に立ちます。

私がしようとしている方法が正しいか間違っているかはわかりませんが、日付値が割り当てられていないクエリ ID を変更することはできません。

4

3 に答える 3

2

日時データ型には MIN 値と MAX 値を使用できます。

... AND `entry_datetime` BETWEEN '1000-01-01 00:00:00' AND '9999-12-31 23:59:59'

DATETIME 型は、日付と時刻の両方の部分を含む値に使用されます。MySQL は、DATETIME 値を「YYYY-MM-DD HH:MM:SS」形式で取得して表示します。サポートされている範囲は「1000-01-01 00:00:00」から「9999-12-31 23:59:59」です。

于 2013-06-11T09:44:43.833 に答える
1

1)

SELECT  *
FROM    `entry`
WHERE   `user` like 'TOM' or `user` like 'PHP'
and     `entry_datetime`
        between COALESCE('2013-03-13 22:20:18', '1000-01-01 00:00:00')
        and     COALESCE('2013-03-13 22:20:26', '9999-12-31 23:59:59');

2)

SELECT  *
FROM    `entry`
WHERE   `user` like 'TOM' or `user` like 'PHP'
and     `entry_datetime`
        between COALESCE(NULL, '1000-01-01 00:00:00')
        and     COALESCE(NULL, '9999-12-31 23:59:59');

NULL を渡す場合 - オプションの日付値が条件として機能します

于 2013-06-11T09:57:56.263 に答える
1

IFNULL機能を使用できます

IFNULL(mindate, '1000-01-01');

これの問題は、最小値と最大値を正しく追加できるように、日付範囲を知る必要があることです。これは、mindate という変数を渡すか作成することを前提としています。

于 2013-06-11T09:50:48.593 に答える