Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Umur dengan Tepat dalam Tahun dari Tarikh Lahir dalam 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!