Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Umur dengan Tepat dalam Tahun dari Tarikh Lahir dalam SQL Server?

Bagaimana untuk Mengira Umur dengan Tepat dalam Tahun dari Tarikh Lahir dalam SQL Server?

DDD
DDDasal
2025-01-22 13:41:10131semak imbas

How to Accurately Calculate Age in Years from a Date of Birth in SQL Server?

Kira umur mengikut tarikh lahir dengan tepat dalam SQL Server

Soalan:

Bagaimana untuk menukar tarikh lahir yang disimpan sebagai nvarchar(25) kepada tarikh dalam SQL Server dan seterusnya mengira umur yang sepadan dalam tahun?

Data sampel:

ID Name DOB
1 John 1992-01-09 00:00:00
2 Sally 1959-05-20 00:00:00

Keluaran yang dijangkakan:

ID Name AGE DOB
1 John 31 1992-01-09 00:00:00
2 Sally 64 1959-05-20 00:00:00

Jawapan: Kira umur dengan tepat

Kaedah yang dicadangkan pada asalnya menghadapi cabaran dalam perakaunan tahun lompat dan penyelewengan dalam bilangan hari dalam bulan tersebut. Versi SQL Server moden memberikan kami teknik yang dipertingkatkan untuk menyelesaikan kerumitan ini.

Cara terbaik untuk mengira umur dalam nombor bulat:

Kaedah ini mudah dan langsung, tetapi ketepatannya mungkin lebih rendah sedikit daripada kaedah perpuluhan.

<code class="language-sql">SELECT
    (YEAR(GETDATE()) - YEAR(DOB)) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeIntYears
FROM YourTable;</code>

Cara terbaik untuk mengira umur sebagai perpuluhan:

Kaedah ini menggunakan fungsi DATEDIFF dan pernyataan CASE untuk mengira umur dengan tepat dan mempertimbangkan sama ada hari lahir telah berlalu dalam tahun semasa.

<code class="language-sql">SELECT
    DATEDIFF(year, DOB, GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeYearsDecimal
FROM YourTable;</code>

Sila ambil perhatian bahawa kod di atas menganggap bahawa lajur DOB telah ditukar kepada jenis DATE. Jika DOB masih daripada jenis nvarchar(25), anda perlu menambah penukaran jenis dalam pertanyaan, contohnya: CONVERT(DATE, DOB, 120). Memilih gaya transformasi yang sesuai bergantung pada format khusus DOB data anda. Contohnya, CONVERT(DATE, DOB, 120) adalah untuk format 'yyyy-mm-dd hh:mi:ss'. Anda mungkin perlu melaraskan bahagian ini agar sesuai dengan format data anda. Pertanyaan akhir sepatutnya kelihatan seperti:

<code class="language-sql">SELECT
    DATEDIFF(year, CONVERT(DATE, DOB, 120), GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(CONVERT(DATE, DOB, 120)) OR (MONTH(GETDATE()) = MONTH(CONVERT(DATE, DOB, 120)) AND DAY(GETDATE()) < DAY(CONVERT(DATE, DOB, 120))) THEN 1 ELSE 0 END AS AgeYearsDecimal
FROM YourTable;</code>

Ganti YourTable dengan nama jadual anda. Memilih kaedah integer atau perpuluhan bergantung pada keperluan ketepatan anda. Kaedah perpuluhan lebih tepat, tetapi kaedah integer lebih ringkas.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Umur dengan Tepat dalam Tahun dari Tarikh Lahir dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn