質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

4回答

344閲覧

SELECT文内のWHERE句について

pg_ri

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2018/08/28 00:52

編集2022/01/12 10:55

先日、こちらでSQL文の書き方について質問をさせていただきました。

Java

1 Date date = new Date(); 2 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 3 String yyyymm ; 4 int yyyy = Integer.parseInt(sdf.format(date).substring(0,4)); 5 int mm = Integer.parseInt(sdf.format(date).substring(4,6)); 6 int dd = Integer.parseInt(sdf.format(date).substring(6,8)); 7 String kijun ; //検索基準日 8 9 if(dd <= 15){ //1~15日の場合、検索日付を同年同月16日 10 yyyymm = Integer.toString(yyyy) + Integer.toString(mm); 11 kijun = yyyymm + "16"; 12 }else{ 13 if(mm == 12){ //12月16~31日の場合、検索日付を翌年1月1日 14 yyyymm = yyyy+1 + "01"; 15 }else if(mm+1 < 10){ //1月~8月の16~31日の場合、同年翌月1日 16 yyyymm = yyyy + "0" + Integer.toString(mm+1); 17 }else{ 18 yyyymm = yyyy + Integer.toString(mm+1); 19 } 20 kijun = yyyymm + "01"; 21 } 22 23 try { 24 strSql = "SELECT " + crLf; 25 strSql += " MC.seq " + crLf; 26 strSql += ",MC.years_months " + crLf; 27 strSql += ",dates " + crLf; 28 strSql += "FROM " + crLf; 29 strSql += " mst_calendar MC" + crLf; 30 strSql += "WHERE " + crLf; 31 strSql += " MC.flg = '1' " + crLf; 32 strSql += " AND " + crLf; 33 strSql += " CONCAT(years_months + dates) > CONVERT(112, CURRENT_DATE) " + crLf; 34 strSql += " ORDER BY years_months ASC, dates ASC " + crLf; 35 strSql += " OFFSET 4 FETCH 1";

上記のような処理にしたのですが、
処理で「kijun」としている日付を使用したSELECT文にしたいと考えています。

条件のところの「CONVERT(112, CURRENT_DATE)」を変数「kijun」にすることは可能でしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macaron_xxx

2018/08/28 01:09

できるかどうかは試してみればいいと思います。
Orlofsky

2018/08/28 02:43

同じSQLでもデータベースによって方言が大きいですから、どのデータベースを使うのかを質問のタグで明示したり、バージョンも明記した方が適切なコメントが付き易いです。
guest

回答4

0

データベースがOracleだとして

SQL

1ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS' ; 2WITH DAY_LIST AS 3 ( 4 SELECT TO_DATE('2018/08/15', 'YYYY/MM/DD') AS DATE1 FROM DUAL UNION ALL 5 SELECT TO_DATE('2018/08/28', 'YYYY/MM/DD') FROM DUAL UNION ALL 6 SELECT TO_DATE('2018/12/31', 'YYYY/MM/DD') FROM DUAL 7 ) 8SELECT 9 CASE 10 WHEN TO_CHAR(DL.DATE1, 'DD') < 16 THEN TRUNC(DL.DATE1, 'MM') 11 ELSE TRUNC(ADD_MONTHS(DL.DATE1, 1), 'MM') 12 END AS KIJUN -- DATE型 13FROM DAY_LIST DL ;
KIJUN ------------------- 2018/08/01 00:00:00 2018/09/01 00:00:00 2019/01/01 00:00:00

SQLでできることをわざわざJavaで書いてコードを複雑にしない方がシステムの維持が容易かと。

投稿2018/08/28 11:36

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もともと convert(112, CURRENT_DATE) で、現在日を「20180828」の形にしているので、kijun がこの形になっているのなら、Prepared Statement を使って置き換えてやるだけでよいです。

SQL にベタに埋めるという手もなくはないのですが、SQL インジェクションの温床になりかねないので避けておきましょう。

投稿2018/08/28 05:21

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな感じではできませんか?
strSql += " CONCAT(years_months + dates) > CONVERT(112, CURRENT_DATE) " + crLf;

strSql += " CONCAT(years_months + dates) > '" + kijun + "'" + crLf;

投稿2018/08/28 04:59

kent789

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PreparedStatementなどを使えば実現できると思います。

関係ないですが、kensakuという名前で検索基準日を宣言してるようにみえますが、処理ではkijunという変数を使用してます。これは問題ないのですか?

投稿2018/08/28 01:10

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問