2016-10-20 16 views
0

datetimesの代わりにvarcharsを持つデータベースを継承しました。ある日付が他の日付よりも小さい場合、いくつかのレポートを作成できます。HeidiSQL varcharをDatetimeに変換する

私は、このデータベースのクエリを持っている:私は2つの日付の最後のmodififedと更新日付を持っている2016-02-17 23:59:59

:このに20160217

Select 
    RENEWDATE, 
    (CONCAT(substring(renewdate, 1,4), "-", substring(renewdate, 5,2), "-", substring(renewdate, 7,2), " 23:59:59")) 
FROM solutionsdmp 
WHERE Approval = "Approved" 
GROUP BY Author 
ORDER BY Author ASC 

この日付フォーマットを変換します。それらはどちらもvarcharsとして保存されていますが、異なる形式です。 1つはvarcharとして格納されますが、datetime2015-02-17 23:59:59のようにフォーマットされ、次に上記の他のものは20160217として表示されます。それらを両方ともdatetimesに変換して、クエリを実行し、一方が他方よりも小さいかどうかをチェックできるようにしたいと思います。更新日が経過したかどうかを確認することができます。

私が働いていないバリエーションの多くを試してみたが、これは私の最新の試みです:

SELECT 
     RENEWDATE, 
     CONVERT(DATETIME,(CONCAT(substring(renewdate, 1,4), "-", substring(renewdate, 5,2), "-", substring(renewdate, 7,2), " 23:59:59"))) 
    FROM solutionsdmp 
    WHERE Approval = "Approved" 
    GROUP BY Author 
    ORDER BY Author ASC 

誰かが正しい方向に私を指すことができますか?

ありがとうございます!

+0

*この日付がこの日付よりも小さいかどうかを伝えたいと思っています* ....もう少し詳しく説明できますか? – Hackerman

+0

@Hackerman投稿を更新しました:) – hlh3406

+0

クエリでifを使用して、より大きい値または小さい値を持つものを確認できます。https://mariadb.com/kb/en/mariadb/if -function/...変換でもhttps://www.techonthenet.com/mariadb/functions/str_to_date.phpを使用できます – Hackerman

答えて

0

自分で回避策の解決策を考え出すことができました。助けが必要な人は誰でも投稿できます。

私はCASTを実行し、次にHAVINGを使用してフィルタリングを行いました。それは私のために働いた!

Select 
    Author, 
    Problem, 
    CAST(Last_Modified_DATE AS DATETIME) AS lmd, 
    CAST((CONCAT(substring(renewdate, 1,4), "-", substring(renewdate, 5,2), "-", substring(renewdate, 7,2), " 23:59:59")) AS DATETIME) AS rend 
from solutionsdmp 
WHERE Approval = "Approved" 
HAVING 
lmd < rend 
order by 
Author ASC 
関連する問題