Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengira Umur dengan Tepat dalam Tahun dari Tarikh Lahir Menggunakan SQL?

Bagaimanakah Saya Boleh Mengira Umur dengan Tepat dalam Tahun dari Tarikh Lahir Menggunakan SQL?

Linda Hamilton
Lepaskan: 2025-01-22 13:32:41
asal
334 orang telah melayarinya

How Can I Accurately Calculate Age in Years from a Date of Birth Using SQL?

Mengira Umur dalam Tahun dari Tarikh Lahir dengan SQL: Pendekatan Tepat

Pengiraan umur yang tepat dalam SQL, berdasarkan tarikh lahir, memerlukan lajur tarikh lahir daripada jenis data datetime atau date yang sah. Jika lajur tarikh lahir anda pada masa ini nvarchar(25), anda mesti menukarnya terlebih dahulu kepada format tarikh yang sesuai.

Dengan mengandaikan penukaran ini selesai, mari kita periksa kaedah pengiraan umur yang berkesan:

Kaedah 1: Pendekatan Ringkas (Anggaran)

Kaedah ini menggunakan DATEDIFF untuk mencari perbezaan jam antara tarikh semasa dan tarikh lahir, kemudian bahagikan dengan anggaran bilangan jam dalam setahun (8766.0):

<code class="language-sql">SELECT DATEDIFF(hour, @dob, GETDATE())/8766.0 AS AgeYearsDecimal</code>
Salin selepas log masuk

Ini menghasilkan umur perpuluhan, tetapi ketepatannya terhad disebabkan oleh variasi dalam bilangan hari setiap bulan dan tahun lompat.

Kaedah yang Diperbaiki dan Lebih Tepat:

Pengiraan Umur Integer:

Kaedah ini mengira umur dalam keseluruhan tahun:

<code class="language-sql">SELECT (CONVERT(int,CONVERT(char(8),@Now,112))-CONVERT(char(8),@Dob,112))/10000 AS AgeIntYears</code>
Salin selepas log masuk

Pengiraan Umur Perpuluhan Tepat:

Untuk umur perpuluhan yang lebih tepat, kaedah yang dipertingkatkan ini disyorkan:

<code class="language-sql">SELECT 1.0* DateDiff(yy,@Dob,@Now)
    +CASE
         WHEN @Now >= DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)) THEN
           (
              1.0   
              * DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)),@Now)
              / DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),1,1),DATEFROMPARTS(DATEPART(yyyy,@Now)+1,1,1))
           )
         ELSE 
           -1 
           * (       
                * DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)),@Now) 
                / DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),1,1),DATEFROMPARTS(DATEPART(yyyy,@Now)+1,1,1))
                )
     END AS AgeYearsDecimal</code>
Salin selepas log masuk

Kaedah lanjutan ini merangkumi tahun lompat dan memberikan perwakilan perpuluhan umur dalam tahun yang sangat tepat. Ia merupakan kaedah pilihan untuk situasi yang memerlukan pengiraan umur yang tepat.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan