Ekstrak data berangka daripada rentetan
Dalam persekitaran pangkalan data, anda mungkin perlu mengekstrak data berangka tertanam daripada rentetan. Pertimbangkan contoh berikut:
<code>字符串 1: 003Preliminary Examination Plan 字符串 2: Coordination005 字符串 3: Balance1000sheet</code>
Hasil yang diingini adalah untuk mengekstrak nombor sahaja daripada setiap rentetan:
<code>字符串 1: 003 字符串 2: 005 字符串 3: 1000</code>
Untuk melaksanakan ini dalam SQL, anda boleh mencipta fungsi tetapan pengguna tersuai (UDF):
<code class="language-sql">CREATE FUNCTION dbo.udf_GetNumeric ( @strAlphaNumeric VARCHAR(256) ) RETURNS VARCHAR(256) AS BEGIN DECLARE @intAlpha INT SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric) BEGIN WHILE @intAlpha > 0 BEGIN SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' ) SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric ) END END RETURN ISNULL(TRIM(@strAlphaNumeric), '0') END GO</code>
UDF ini pada asasnya mengenal pasti dan mengalih keluar semua aksara bukan angka daripada rentetan input. Kemudian, ia menyemak sama ada rentetan yang terhasil boleh ditukar kepada integer dan mengembalikannya dengan sewajarnya.
Untuk menggunakan fungsi ini, hanya gunakannya pada lajur yang berkaitan:
<code class="language-sql">SELECT dbo.udf_GetNumeric(column_name) from table_name</code>
Ini hanya akan mengembalikan bahagian angka rentetan dalam lajur yang ditentukan. Untuk data contoh yang diberikan, hasilnya akan sepadan dengan nilai yang dijangkakan:
<code>003 005 1000</code>
Nota: Terdapat ralat tatabahasa dalam pernyataan RETURN
dalam kod asal, yang telah diperbetulkan kepada RETURN ISNULL(TRIM(@strAlphaNumeric), '0')
yang lebih ringkas dan berkesan untuk mengelakkan masalah penukaran sarang dan jenis penukaran yang tidak perlu. Fungsi yang disemak ini lebih jelas dan lebih mudah difahami dan diselenggara.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengekstrak nilai angka daripada rentetan dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!