
オラクルでsysdateをとろうとすると、現在わたしの使っている実装ではselect sysdate from DUALに対し、例えば
2006/03/24 18:13:42 が
返されます。
しかしsysdateを関数の中で使うと最初の"20"と時分秒がなくなり、06-03-24のような値が返されます。例えば以下のようなSQLにおいてです。
select translate(sysdate,'1234567890-','1234567890-') from DUAL;
select substr(sysdate,1) from DUAL;
sysdateのフォーマットが、使い方によって変わるのはなぜなのでしょうか。
No.2ベストアンサー
- 回答日時:
>select translate(sysdate,'1234567890-','1234567890-') from DUAL;
>select substr(sysdate,1) from DUAL;
これらのSQLでのSYSDATEは、関数のパラメータになっていますが、
関数は、VARCHAR2/CHAR属性のパラメータを想定しています。
なので、オラクルは、暗黙に"TO_CHAR(SYSDAE)"を実行しています。
で、TO_CHARでの日付書式がデフォルト値になるので、NLSパラメータに
左右されて、yy-mm-ddな扱いになります。
今回のように、SQL文の中での日付書式に関しては、クライアントのNLSでなく
サーバサイドの環境によって決まるはずですので、そちらを確認してください。
出来ることなら、日付書式のデフォルトに左右されないよう明示的な型変換(TO_CHAR)を
使うのが好ましいと思います。
ありがとうございます。関数のパラメーターのデータ型から追求していけばよかったなあと思いました。
select to_char(sysdate) from DUAL; を実行して確認してみました。
どうしてもyyyy/mm/ddフォーマットでINSERTしなければならないデータだったので、to_char関数を使用後に、translateとconcatenateを使って対応することにしました。
No.1
- 回答日時:
クライアント側でNLS_DATE_FORMAT 環境変数を設定していませんか?
日付のフォーマットは接続クライアントの役割で
NLS_DATE_FORMATまたはNLS_TERRITORYによって変化します。
データベースサーバ自身も接続クライアントですから
デフォルトのNLS_DATE_FORMATを暗黙変換で使用します。
クライアントの NLS_DATE_FORMAT とサーバの NLS_DATE_FORMAT が異なっているからでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server SQLについて質問です。 日付値の計算の練習で、dual表を用いて、 今日の日付、誕生日、生まれてか 1 2022/05/13 20:42
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Oracle SQL update方法 2 2022/06/22 14:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
SQLite3のtext→date変換について
-
Excelグラフの日付軸の日付がず...
-
月の日付一覧について
-
重複するIDのデータを1行にま...
-
SQLで部分的にGROUP BYしたいとき
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
日付の最大値レコードを取得す...
-
日付型→文字列
-
すいません
-
SQLサーバで和暦から西暦に変換...
-
SQL*Loaderについて
-
Exel関数で誕生日がきたら...
-
Accessのマクロでモジュールを...
-
日付型カラムへのデータINSERT
-
Statement ignored というエラー
-
Access VBAで行ラベルが定義さ...
-
Excel VBAで「プログラム実行」...
-
ODBCリンクの際にACCESSでは読...
-
PL/SQLカーソルの2重FORループ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
重複するIDのデータを1行にま...
-
Accessの数値から時間に変換す...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLサーバで和暦から西暦に変換...
-
テーブルの主キーをdate型...
-
日付書式に変換でこまっています!
-
エクセル 日付による並べ替え...
-
日数算出SQL
-
日付の切り出し方法について
-
wordの差し込み印刷での日付表示
-
指定した年月までのデータを取...
-
OSのシステム日付を変更して...
-
Excelグラフの日付軸の日付がず...
-
日付の最大値レコードを取得す...
-
特定の日付が第何週目にあるか...
-
OSのシステム日付を変更して...
-
excel 日付のみ置換したいのです
-
WHERE句にて「30日前から今日ま...
おすすめ情報