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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Q&A

解決済

4回答

7753閲覧

日付+001から始まる連番でIDを自動生成したい

NameLess9068

総合スコア12

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

0グッド

0クリップ

投稿2016/10/08 01:51

javaに関する質問です。

新規登録時、DAOを使ってデータベースにアクセスし、001から始まる連番をデータベースのIDカラムの中に登録したいです。
1から順にならauto_increamentでできるのですが、001から順に生成するにはどうすればいいでしょうか。

また、そのIDに今日の日付を付けたいと思っています。

[例]10月1日に10番目に登録した人場合 ID:1001-010
その翌日の1番目に登録した人の場合 ID:1002-001

今までIDはauto_incrementで1から順に生成していたので、方法が分かりません。

ちなみにフレームワークはjavaEE,struts2、DBMSはMysqlを使用しています。

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

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

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

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

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

guest

回答4

0

自己解決

皆さんご回答ありがとうございました。
SQLではなくJavaでIDを生成することにしました。

投稿2016/10/10 02:56

NameLess9068

総合スコア12

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

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

0

皆さんがおっしゃる通り、かなり悪い仕様です。
一応、SQLでやるなら

sql

1-- 日付4桁(文字列)はパラメータ(p_date)とする 2 3INSERT INTO members(id, name, ……) 4VALUES((SELECT CONCAT(p_date, '-', LPAD(SUBSTR(MAX(id), 6, 3) + 1, 3, '0') 5 FROM members WHERE id LIKE CONCAT(p_date,'%')) 6 , p_name ……);

※ 文字から数値のキャストを省略しています(MySQLは自動キャストが可能なため)

となりますけど、お勧めはできないですね。

投稿2016/10/10 02:36

kantomi

総合スコア295

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

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

0

連番の処理はsqlで行わない方が無難です
データの削除やフラグでの論理削除により
連番なんてすぐずれてしまい正確性に欠けます
どうしても必要なデータであれば日付データを
保持した上でauto_incrementしたidのカラムを
利用して都度計算するのが妥当です
また例示のフォーマットだと999件を越えると
カンストしますので注意してください

投稿2016/10/08 07:39

yambejp

総合スコア114572

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

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

0

上記フォーマットだと文字列型で格納することになりそうですが、その場合auto incrementは利用できません。
アプリケーション側で操作するしかないように思います。

クエリでやるのであれば、おそらくINSERT文のVALUESでsysdatetime()、"-"、そのテーブルで同じ日の登録データ件数+1を結合して設定することになりますかね。

投稿2016/10/08 06:38

編集2016/10/08 06:40
goute

総合スコア216

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問