0

「reportinc」というテーブルがあり、1 日または数日前の 18:01 (%H:%i の時間形式) から今日の 18:00 までの VARCHAR フィールドの項目を抽出する必要があります。

このクエリで試しました

SELECT `ID incidente`, `Data/ora apertura`
FROM `reportinc`
WHERE `Data/ora apertura` 
BETWEEN 
(   
SELECT date_format( now( ) - INTERVAL 1
DAY , "%d/%m/%y at 18:01 " )
)
AND 
(
SELECT date_format( now( ) , "%d/%m/%y at 18:00 " )

昨日の18:01から今日の18:00まで抽出したい。しかし、結果は昨日の 00:00 から今日までです。18:00 または 18_01 を有効な時刻形式と見なしません。クエリに時間を指定する方法

どうもありがとうございました

4

3 に答える 3

1

フィールドはData/ora apertura DATETIME フィールドであるか、CAST を作成する必要があります。

次に、これを行う必要があります。

SELECT `ID incidente`, `Data/ora apertura`
FROM `reportinc`
WHERE `Data/ora apertura` 
BETWEEN 
(   
    SELECT date_format( now( ) - INTERVAL 1 DAY , "%Y-%m-%d 18:01:00" )
)
AND 
(
    SELECT date_format( now( ) , "%Y-%m-%d 18:00:00" 
)

フィールド タイプが VARCHAR の場合、Between は期待どおりに機能しません。

于 2013-01-22T13:56:59.490 に答える
0

最初に、形式を varchar から有効な日付形式に変更します。varchar は値を文字列として受け取り、正規表現を使用して日付と時刻を分岐する必要があります。前のオプションを使用することをお勧めします。

于 2013-01-22T13:56:27.800 に答える
0

編集により、より具体的な日時形式が追加されました

時刻と日付の組み合わせで同じ問題に遭遇しました。時間は無視されるため、1 日を通して結果が得られます。

MySQL を操作するには、PHP または別のプログラミング言語を試してください。または、私が提案するように、CSV ファイルのインポート方法を変更してみてください。

SELECT *,CAST((STR_TO_DATE(`Data/ora apertura`, '%d/%m/%Y %H.%i')) AS DATETIME) 
AS DATE_TIME 
FROM reportinc
WHERE (CAST((STR_TO_DATE(`Data/ora apertura`, '%d/%m/%Y %H.%i')) AS DATETIME))  >= ('2012-22-01 21:00');

SELECT *,CAST((STR_TO_DATE(`Data/ora apertura`, '%d/%m/%Y %H.%i')) AS DATETIME) 
AS DATE_TIME 
FROM reportinc
WHERE (STR_TO_DATE(`Data/ora apertura`, '%d/%m/%Y %H.%i'))  >= ('2012-22-01 21:00');

サンプルデータ:

CREATE TABLE reportinc (
  `ID_incidente` int auto_increment primary key,
  `Data/ora apertura` varchar(30)
  );


INSERT INTO reportinc (`Data/ora apertura`) 
VALUES 
("31/07/2012 10.46"),
("31/07/2012 10.47"),
("22/01/2013 20.00"),
("23/01/2013 10.00");

SQL FIDDLE デモ ---

次のようなものを試してください:

キャスト機能の使用:

SELECT * FROM reportinc WHERE (CAST(`Data/ora apertura` AS DATETIME)) >= NOW() - INTERVAL 3 hour;

str_to_date 関数の使用:

   SELECT * FROM reportinc WHERE (STR_TO_DATE(`Data/ora apertura`,'%Y-%m-%d %H:%i:%s')) >= NOW() - INTERVAL 3 hour;

時間範囲が少し不明確なので、例として 3 時間を取り上げました。特定の日付と時刻を使用することもできます。

キャストの使用:

`SELECT * FROM reportinc WHERE (CAST(`Data/ora apertura` AS DATETIME)) >= ('2013-01-22 20:00:00');`

str_to_date の使用

SELECT  * FROM reportinc WHERE (STR_TO_DATE(apertura, '%Y-%m-%d %H:%i:%s'))  >= ('2013-01-21 20:00:00');

サンプルデータ:

CREATE TABLE reportinc (
  `ID_incidente` int auto_increment primary key,
  `Data/ora apertura` varchar(30),
  `Data/ora apertura1` datetime
  );


INSERT INTO reportinc ( `Data/ora apertura`, `Data/ora apertura1`) 
VALUES (NOW() - INTERVAL 1 day, NOW() - INTERVAL 1 day),
(NOW() - INTERVAL 1 hour, NOW() - INTERVAL 1 hour),
(NOW() - INTERVAL 3 hour, NOW() - INTERVAL 3 hour),
(NOW() - INTERVAL 6 hour, NOW() - INTERVAL 6 hour),
(NOW() - INTERVAL 9 hour, NOW() - INTERVAL 9 hour),
(NOW() - INTERVAL 1 year, NOW() - INTERVAL 1 year);

SQL フィドルのデモ

ところで私のアドバイスは、列名とテーブル名にスラッシュやスペースなどを使用するのをやめることです。

役に立った回答を受け入れていただければ幸いです。

于 2013-01-22T17:54:13.470 に答える