質問: 'AAA' ORDER BY 適用開始日付; 【期待する値】 2018-02-01 00:00:00 2018-03-01 00:00:00 2018-03-20 00:00:00 (SYSDATEを挿入したのが、00:00:00だったとします。) なのですが・・・ 実際にテストしてみると、以下の様に値が挿入されてしまいます。 2018-02-01 14:32:04 2018-03-01 14:32:04 2018-03-20 14:32:04 (14:32:04は、実際に処理を動かした時間) 何故このような結果になってしまうかわかりません。 ご教授いただけないでしょうか? また、回避する方法(期待する値になる方法)はございますでしょうか?
回答: OracleではDATE型への設定は以下のように TO_DATEを使います。TO_DATEがないので暗黙の型変換が起きて、変なデータが入ってしまったのでしょう。今後はデータ型の扱いにシビアになってください。 文字列はシングルクォートで囲みます。 準備 ``` CREATE TABLE 商品構成マスタ( 商品コード VARCHAR2(3BYTE), 構成品 VARCHAR2(3BYTE), 適用開始日付 DATE, 個数 NUMBER(1,0) ) ; INSERT INTO 商品構成マスタ VALUES ('AAA', '111', TO_DATE('2018-02-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1) ; INSERT INTO 商品構成マスタ VALUES ('AAA', '222', TO_DATE('2018-02-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1) ; INSERT INTO 商品構成マスタ VALUES ('AAA', '111', TO_DATE('2018-03-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1) ; INSERT INTO 商品構成マスタ VALUES ('AAA', '333', TO_DATE('2018-03-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1) ; INSERT INTO 商品構成マスタ VALUES ('AAA', '333', TO_DATE('2018-03-20 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1) ; INSERT INTO 商品構成マスタ VALUES ('AAA', '444', TO_DATE('2018-03-20 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1) ; COMMIT; ``` 実行 ``` ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' ; SELECT DISTINCT 適用開始日付 FROM 商品構成マスタ WHERE 商品コード = 'AAA' ORDER BY 適用開始日付; 適用開始日付2018-02-01 00:00:00 2018-03-01 00:00:00 2018-03-20 00:00:00 ``` 追記 CREATE TABLEとSELECTの中に全角空白が入っています。半角空白を使ってください。 メモ帳でコードを書いているならエディタを使ってください。 有償ソフトの秀丸エディタなら全角空白を□で表示するようカスタマイズできます。 秀丸エディタで不可視文字を表示 サクラエディタでも同じ機能があったかも?