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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

2回答

3408閲覧

SQL 生年月日から年齢計算

MATLIB

総合スコア27

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2020/10/15 02:18

編集2020/10/15 03:29

現在、DB(A)のテーブル(B)にbirthに生年月日のデータを入れております。
画面のテキストボックスに取得したbirthの値から年齢を計算して値をテキストボックスにインサートしたいです。

そこで質問なのですが、Bテーブルのbirthには-や/が入っていない20201015のように値が入っています。
select birth from B でbirth(生年月日)は取得できますが、現在日から年齢の計算をして取得する方法が分かりません。

どのようにSQL文を作成すればいいでしょうか。

<テーブル定義>

CREATE TABLE public.B ( id character(20) COLLATE pg_catalog."default", birth character(8) COLLATE pg_catalog."default", ) TABLESPACE pg_default; ALTER TABLE public.B OWNER to postgres;

<試したこと>
select birth from B でbirthの値を取得するところまで確認

ご教授お願い致します。

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

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

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

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

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

m.ts10806

2020/10/15 02:30

> birthの値から年齢を計算してインサートしたいです。 年齢は1年たてば変わってしまうのでシステム日付から毎回計算すべきとは思いますが、 どういう要件・意図での設計でしょうか。
MATLIB

2020/10/15 02:50

下記のようになります。 IDのテキストボックスにIDを入力してフォーカスアウトしたら、 そのIDのbirth値から年齢を計算して取得し、年齢のテキストボックスにインサートする。
m.ts10806

2020/10/15 02:54

それを「インサート」と表現すべきではないかと思います。思わぬ誤解を招きます。 「設定する」もしくは「値とする」のようにすべきでしょう。 いずれにしてももう少し要件具体的に記載の上、自身でやってみたこと調べたことを記載してください。
MATLIB

2020/10/15 03:14

了解致しました。
m.ts10806

2020/10/15 03:15

テーブル定義も必要です。 CREATE TABLE文で提示してください。 あと、自身でやってみたこと調べたことを記載してください。
sazi

2020/10/15 03:23

その年齢の基準は何ですか? 現在日とか、4/1時点とか色々あると思うのですが。
MATLIB

2020/10/15 03:27

現在日になります。 内容修正しました。
m.ts10806

2020/10/15 03:28

しかし調べて何も出ない内容に思えません。 何も調べてないならまず調べるところから(回答についている記事も調べて出てくるものです)
MATLIB

2020/10/15 03:46

調べているのですが、理解できるものが出てきません。 age()を使用して引数を使用せずに計算しているのはいっぱいあるのですが、、
guest

回答2

0

ベストアンサー

age(timestamp)なのですから、birthをtimestamp型に変換すれば良いわけです。

変換の方法は色々ありますが、下記SQLでは以下の変換を行っています。
1.integerにCast
2.integerを日付の書式の文字列に変換
3.timestamp にcast

SQL

1select to_char(birth::integer,'0000/00/00')::timestamp as timestamp型Birth 2 , date_part('years', age(to_char(birth::integer,'0000/00/00')::timestamp)) as 年齢 3from b

※birthに空白がある場合は考慮していません(エラーになります)※NullはOK

投稿2020/10/15 04:05

編集2020/10/15 04:08
sazi

総合スコア25206

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

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

0

投稿2020/10/15 02:43

Orlofsky

総合スコア16415

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

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

MATLIB

2020/10/15 03:35

SELECT date_part('years', age(timestamp '2000-01-01')) AS age;で年齢が取得できることは確認したのですが、'2000-01-01'を引数とするときはどうしたらいいですか?
Orlofsky

2020/10/15 03:54

途中の ' を削ってください。データのクリーニングと言います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問