/*
--------- Unicode 3.2, Part 2: Derived Props (Alpha & Dec) ---------
Created By: Solomon Rutzky
Created On: 2018-03-27
Updated On: n/a
Location: https://pastebin.com/edit/qjEc7zvH
Related blog post: https://SqlQuantumLeap.com/2018/04/02/the-uni-code-the-search-for-the-true-list-of-valid-characters-for-t-sql-regular-identifiers-part-1/
DESCRIPTION: This script adds and populates the "IsAlphabetic" and "IsDecimal" columns.
The list of code points having the "Alphabetic" property is found in the
text file noted below under "SOURCE DATA". The code points that have the
"Decimal Number" property can be derived from the main
"UnicodeCharacterDatabase" table using the algorithm found on the
https://www.unicode.org/Public/3.2-Update/DerivedProperties-3.2.0.html
page, in the "Derived Extracted Properties" chart, under "DerivedNumericType".
As with the main "UnicodeCharacterDatabase" table, we are only concerned
with just the BMP code points (i.e. the U+0000 through U+FFFF range).
REQUIREMENTS:
1) SQL Server 2005 or newer
2) Unicode 3.2, Part 1: Unicode Character Database (UCD)
found at: https://pastebin.com/Vj1HFg1v
SOURCE DATA: https://www.unicode.org/Public/3.2-Update/DerivedCoreProperties-3.2.0.txt
Copyright © 1991-2018 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Unicode data files and any associated documentation
(the "Data Files") or Unicode software and any associated documentation
(the "Software") to deal in the Data Files or Software
without restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, and/or sell copies of
the Data Files or Software, and to permit persons to whom the Data Files
or Software are furnished to do so, provided that either
(a) this copyright and permission notice appear with all copies
of the Data Files or Software, or
(b) this copyright and permission notice appear in associated
Documentation.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT OF THIRD PARTY RIGHTS.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THE DATA FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder
shall not be used in advertising or otherwise to promote the sale,
use or other dealings in these Data Files or Software without prior
written authorization of the copyright holder.
*/
USE [UnicodeTesting];
SET NOCOUNT ON;
IF (OBJECT_ID(N'[v3-2].UnicodeCharacterDatabase') IS NULL)
BEGIN
RAISERROR('
Missing the main "UnicodeCharacterDatabase" table.
Please load that first. You can get it from:
https://pastebin.com/Vj1HFg1v', 16, 1);
RETURN;
END;
BEGIN TRAN;
BEGIN TRY
-----------------------------------------------------------------------
-- Add and populate: "IsAlphabetic"
-----------------------------------
IF (NOT EXISTS(
SELECT *
FROM sys.columns sc
WHERE sc.[object_id] = OBJECT_ID(N'[v3-2].UnicodeCharacterDatabase')
AND sc.[name] = N'IsAlphabetic'))
BEGIN
ALTER TABLE [v3-2].UnicodeCharacterDatabase
ADD [IsAlphabetic] BIT NULL;
END;
EXEC (N'
UPDATE ucd
SET ucd.[IsAlphabetic] = 1
-- SELECT *
FROM [v3-2].UnicodeCharacterDatabase ucd
WHERE 1 = 0
OR ucd.[CodePoint] BETWEEN 0x0041 AND 0x005A
OR ucd.[CodePoint] BETWEEN 0x0061 AND 0x007A
OR ucd.[CodePoint] = 0x00AA
OR ucd.[CodePoint] = 0x00B5
OR ucd.[CodePoint] = 0x00BA
OR ucd.[CodePoint] BETWEEN 0x00C0 AND 0x00D6
OR ucd.[CodePoint] BETWEEN 0x00D8 AND 0x00F6
OR ucd.[CodePoint] BETWEEN 0x00F8 AND 0x01BA
OR ucd.[CodePoint] = 0x01BB
OR ucd.[CodePoint] BETWEEN 0x01BC AND 0x01BF
OR ucd.[CodePoint] BETWEEN 0x01C0 AND 0x01C3
OR ucd.[CodePoint] BETWEEN 0x01C4 AND 0x0220
OR ucd.[CodePoint] BETWEEN 0x0222 AND 0x0233
OR ucd.[CodePoint] BETWEEN 0x0250 AND 0x02AD
OR ucd.[CodePoint] BETWEEN 0x02B0 AND 0x02B8
OR ucd.[CodePoint] BETWEEN 0x02BB AND 0x02C1
OR ucd.[CodePoint] BETWEEN 0x02D0 AND 0x02D1
OR ucd.[CodePoint] BETWEEN 0x02E0 AND 0x02E4
OR ucd.[CodePoint] = 0x02EE
OR ucd.[CodePoint] = 0x0345
OR ucd.[CodePoint] = 0x037A
OR ucd.[CodePoint] = 0x0386
OR ucd.[CodePoint] BETWEEN 0x0388 AND 0x038A
OR ucd.[CodePoint] = 0x038C
OR ucd.[CodePoint] BETWEEN 0x038E AND 0x03A1
OR ucd.[CodePoint] BETWEEN 0x03A3 AND 0x03CE
OR ucd.[CodePoint] BETWEEN 0x03D0 AND 0x03F5
OR ucd.[CodePoint] BETWEEN 0x0400 AND 0x0481
OR ucd.[CodePoint] BETWEEN 0x048A AND 0x04CE
OR ucd.[CodePoint] BETWEEN 0x04D0 AND 0x04F5
OR ucd.[CodePoint] BETWEEN 0x04F8 AND 0x04F9
OR ucd.[CodePoint] BETWEEN 0x0500 AND 0x050F
OR ucd.[CodePoint] BETWEEN 0x0531 AND 0x0556
OR ucd.[CodePoint] = 0x0559
OR ucd.[CodePoint] BETWEEN 0x0561 AND 0x0587
OR ucd.[CodePoint] BETWEEN 0x05B0 AND 0x05B9
OR ucd.[CodePoint] BETWEEN 0x05BB AND 0x05BD
OR ucd.[CodePoint] = 0x05BF
OR ucd.[CodePoint] BETWEEN 0x05C1 AND 0x05C2
OR ucd.[CodePoint] = 0x05C4
OR ucd.[CodePoint] BETWEEN 0x05D0 AND 0x05EA
OR ucd.[CodePoint] BETWEEN 0x05F0 AND 0x05F2
OR ucd.[CodePoint] BETWEEN 0x0621 AND 0x063A
OR ucd.[CodePoint] = 0x0640
OR ucd.[CodePoint] BETWEEN 0x0641 AND 0x064A
OR ucd.[CodePoint] BETWEEN 0x064B AND 0x0655
OR ucd.[CodePoint] BETWEEN 0x066E AND 0x066F
OR ucd.[CodePoint] = 0x0670
OR ucd.[CodePoint] BETWEEN 0x0671 AND 0x06D3
OR ucd.[CodePoint] = 0x06D5
OR ucd.[CodePoint] BETWEEN 0x06D6 AND 0x06DC
OR ucd.[CodePoint] BETWEEN 0x06E1 AND 0x06E4
OR ucd.[CodePoint] BETWEEN 0x06E5 AND 0x06E6
OR ucd.[CodePoint] BETWEEN 0x06E7 AND 0x06E8
OR ucd.[CodePoint] = 0x06ED
OR ucd.[CodePoint] BETWEEN 0x06FA AND 0x06FC
OR ucd.[CodePoint] = 0x0710
OR ucd.[CodePoint] = 0x0711
OR ucd.[CodePoint] BETWEEN 0x0712 AND 0x072C
OR ucd.[CodePoint] BETWEEN 0x0730 AND 0x073F
OR ucd.[CodePoint] BETWEEN 0x0780 AND 0x07A5
OR ucd.[CodePoint] BETWEEN 0x07A6 AND 0x07B0
OR ucd.[CodePoint] = 0x07B1
OR ucd.[CodePoint] BETWEEN 0x0901 AND 0x0902
OR ucd.[CodePoint] = 0x0903
OR ucd.[CodePoint] BETWEEN 0x0905 AND 0x0939
OR ucd.[CodePoint] = 0x093D
OR ucd.[CodePoint] BETWEEN 0x093E AND 0x0940
OR ucd.[CodePoint] BETWEEN 0x0941 AND 0x0948
OR ucd.[CodePoint] BETWEEN 0x0949 AND 0x094C
OR ucd.[CodePoint] = 0x0950
OR ucd.[CodePoint] BETWEEN 0x0958 AND 0x0961
OR ucd.[CodePoint] BETWEEN 0x0962 AND 0x0963
OR ucd.[CodePoint] = 0x0981
OR ucd.[CodePoint] BETWEEN 0x0982 AND 0x0983
OR ucd.[CodePoint] BETWEEN 0x0985 AND 0x098C
OR ucd.[CodePoint] BETWEEN 0x098F AND 0x0990
OR ucd.[CodePoint] BETWEEN 0x0993 AND 0x09A8
OR ucd.[CodePoint] BETWEEN 0x09AA AND 0x09B0
OR ucd.[CodePoint] = 0x09B2
OR ucd.[CodePoint] BETWEEN 0x09B6 AND 0x09B9
OR ucd.[CodePoint] BETWEEN 0x09BE AND 0x09C0
OR ucd.[CodePoint] BETWEEN 0x09C1 AND 0x09C4
OR ucd.[CodePoint] BETWEEN 0x09C7 AND 0x09C8
OR ucd.[CodePoint] BETWEEN 0x09CB AND 0x09CC
OR ucd.[CodePoint] = 0x09D7
OR ucd.[CodePoint] BETWEEN 0x09DC AND 0x09DD
OR ucd.[CodePoint] BETWEEN 0x09DF AND 0x09E1
OR ucd.[CodePoint] BETWEEN 0x09E2 AND 0x09E3
OR ucd.[CodePoint] BETWEEN 0x09F0 AND 0x09F1
OR ucd.[CodePoint] = 0x0A02
OR ucd.[CodePoint] BETWEEN 0x0A05 AND 0x0A0A
OR ucd.[CodePoint] BETWEEN 0x0A0F AND 0x0A10
OR ucd.[CodePoint] BETWEEN 0x0A13 AND 0x0A28
OR ucd.[CodePoint] BETWEEN 0x0A2A AND 0x0A30
OR ucd.[CodePoint] BETWEEN 0x0A32 AND 0x0A33
OR ucd.[CodePoint] BETWEEN 0x0A35 AND 0x0A36
OR ucd.[CodePoint] BETWEEN 0x0A38 AND 0x0A39
OR ucd.[CodePoint] BETWEEN 0x0A3E AND 0x0A40
OR ucd.[CodePoint] BETWEEN 0x0A41 AND 0x0A42
OR ucd.[CodePoint] BETWEEN 0x0A47 AND 0x0A48
OR ucd.[CodePoint] BETWEEN 0x0A4B AND 0x0A4C
OR ucd.[CodePoint] BETWEEN 0x0A59 AND 0x0A5C
OR ucd.[CodePoint] = 0x0A5E
OR ucd.[CodePoint] BETWEEN 0x0A70 AND 0x0A71
OR ucd.[CodePoint] BETWEEN 0x0A72 AND 0x0A74
OR ucd.[CodePoint] BETWEEN 0x0A81 AND 0x0A82
OR ucd.[CodePoint] = 0x0A83
OR ucd.[CodePoint] BETWEEN 0x0A85 AND 0x0A8B
OR ucd.[CodePoint] = 0x0A8D
OR ucd.[CodePoint] BETWEEN 0x0A8F AND 0x0A91
OR ucd.[CodePoint] BETWEEN 0x0A93 AND 0x0AA8
OR ucd.[CodePoint] BETWEEN 0x0AAA AND 0x0AB0
OR ucd.[CodePoint] BETWEEN 0x0AB2 AND 0x0AB3
OR ucd.[CodePoint] BETWEEN 0x0AB5 AND 0x0AB9
OR ucd.[CodePoint] = 0x0ABD
OR ucd.[CodePoint] BETWEEN 0x0ABE AND 0x0AC0
OR ucd.[CodePoint] BETWEEN 0x0AC1 AND 0x0AC5
OR ucd.[CodePoint] BETWEEN 0x0AC7 AND 0x0AC8
OR ucd.[CodePoint] = 0x0AC9
OR ucd.[CodePoint] BETWEEN 0x0ACB AND 0x0ACC
OR ucd.[CodePoint] = 0x0AD0
OR ucd.[CodePoint] = 0x0AE0
OR ucd.[CodePoint] = 0x0B01
OR ucd.[CodePoint] BETWEEN 0x0B02 AND 0x0B03
OR ucd.[CodePoint] BETWEEN 0x0B05 AND 0x0B0C
OR ucd.[CodePoint] BETWEEN 0x0B0F AND 0x0B10
OR ucd.[CodePoint] BETWEEN 0x0B13 AND 0x0B28
OR ucd.[CodePoint] BETWEEN 0x0B2A AND 0x0B30
OR ucd.[CodePoint] BETWEEN 0x0B32 AND 0x0B33
OR ucd.[CodePoint] BETWEEN 0x0B36 AND 0x0B39
OR ucd.[CodePoint] = 0x0B3D
OR ucd.[CodePoint] = 0x0B3E
OR ucd.[CodePoint] = 0x0B3F
OR ucd.[CodePoint] = 0x0B40
OR ucd.[CodePoint] BETWEEN 0x0B41 AND 0x0B43
OR ucd.[CodePoint] BETWEEN 0x0B47 AND 0x0B48
OR ucd.[CodePoint] BETWEEN 0x0B4B AND 0x0B4C
OR ucd.[CodePoint] = 0x0B56
OR ucd.[CodePoint] = 0x0B57
OR ucd.[CodePoint] BETWEEN 0x0B5C AND 0x0B5D
OR ucd.[CodePoint] BETWEEN 0x0B5F AND 0x0B61
OR ucd.[CodePoint] = 0x0B82
OR ucd.[CodePoint] = 0x0B83
OR ucd.[CodePoint] BETWEEN 0x0B85 AND 0x0B8A
OR ucd.[CodePoint] BETWEEN 0x0B8E AND 0x0B90
OR ucd.[CodePoint] BETWEEN 0x0B92 AND 0x0B95
OR ucd.[CodePoint] BETWEEN 0x0B99 AND 0x0B9A
OR ucd.[CodePoint] = 0x0B9C
OR ucd.[CodePoint] BETWEEN 0x0B9E AND 0x0B9F
OR ucd.[CodePoint] BETWEEN 0x0BA3 AND 0x0BA4
OR ucd.[CodePoint] BETWEEN 0x0BA8 AND 0x0BAA
OR ucd.[CodePoint] BETWEEN 0x0BAE AND 0x0BB5
OR ucd.[CodePoint] BETWEEN 0x0BB7 AND 0x0BB9
OR ucd.[CodePoint] BETWEEN 0x0BBE AND 0x0BBF
OR ucd.[CodePoint] = 0x0BC0
OR ucd.[CodePoint] BETWEEN 0x0BC1 AND 0x0BC2
OR ucd.[CodePoint] BETWEEN 0x0BC6 AND 0x0BC8
OR ucd.[CodePoint] BETWEEN 0x0BCA AND 0x0BCC
OR ucd.[CodePoint] = 0x0BD7
OR ucd.[CodePoint] BETWEEN 0x0C01 AND 0x0C03
OR ucd.[CodePoint] BETWEEN 0x0C05 AND 0x0C0C
OR ucd.[CodePoint] BETWEEN 0x0C0E AND 0x0C10
OR ucd.[CodePoint] BETWEEN 0x0C12 AND 0x0C28
OR ucd.[CodePoint] BETWEEN 0x0C2A AND 0x0C33
OR ucd.[CodePoint] BETWEEN 0x0C35 AND 0x0C39
OR ucd.[CodePoint] BETWEEN 0x0C3E AND 0x0C40
OR ucd.[CodePoint] BETWEEN 0x0C41 AND 0x0C44
OR ucd.[CodePoint] BETWEEN 0x0C46 AND 0x0C48
OR ucd.[CodePoint] BETWEEN 0x0C4A AND 0x0C4C
OR ucd.[CodePoint] BETWEEN 0x0C55 AND 0x0C56
OR ucd.[CodePoint] BETWEEN 0x0C60 AND 0x0C61
OR ucd.[CodePoint] BETWEEN 0x0C82 AND 0x0C83
OR ucd.[CodePoint] BETWEEN 0x0C85 AND 0x0C8C
OR ucd.[CodePoint] BETWEEN 0x0C8E AND 0x0C90
OR ucd.[CodePoint] BETWEEN 0x0C92 AND 0x0CA8
OR ucd.[CodePoint] BETWEEN 0x0CAA AND 0x0CB3
OR ucd.[CodePoint] BETWEEN 0x0CB5 AND 0x0CB9
OR ucd.[CodePoint] = 0x0CBE
OR ucd.[CodePoint] = 0x0CBF
OR ucd.[CodePoint] BETWEEN 0x0CC0 AND 0x0CC4
OR ucd.[CodePoint] = 0x0CC6
OR ucd.[CodePoint] BETWEEN 0x0CC7 AND 0x0CC8
OR ucd.[CodePoint] BETWEEN 0x0CCA AND 0x0CCB
OR ucd.[CodePoint] = 0x0CCC
OR ucd.[CodePoint] BETWEEN 0x0CD5 AND 0x0CD6
OR ucd.[CodePoint] = 0x0CDE
OR ucd.[CodePoint] BETWEEN 0x0CE0 AND 0x0CE1
OR ucd.[CodePoint] BETWEEN 0x0D02 AND 0x0D03
OR ucd.[CodePoint] BETWEEN 0x0D05 AND 0x0D0C
OR ucd.[CodePoint] BETWEEN 0x0D0E AND 0x0D10
OR ucd.[CodePoint] BETWEEN 0x0D12 AND 0x0D28
OR ucd.[CodePoint] BETWEEN 0x0D2A AND 0x0D39
OR ucd.[CodePoint] BETWEEN 0x0D3E AND 0x0D40
OR ucd.[CodePoint] BETWEEN 0x0D41 AND 0x0D43
OR ucd.[CodePoint] BETWEEN 0x0D46 AND 0x0D48
OR ucd.[CodePoint] BETWEEN 0x0D4A AND 0x0D4C
OR ucd.[CodePoint] = 0x0D57
OR ucd.[CodePoint] BETWEEN 0x0D60 AND 0x0D61
OR ucd.[CodePoint] BETWEEN 0x0D82 AND 0x0D83
OR ucd.[CodePoint] BETWEEN 0x0D85 AND 0x0D96
OR ucd.[CodePoint] BETWEEN 0x0D9A AND 0x0DB1
OR ucd.[CodePoint] BETWEEN 0x0DB3 AND 0x0DBB
OR ucd.[CodePoint] = 0x0DBD
OR ucd.[CodePoint] BETWEEN 0x0DC0 AND 0x0DC6
OR ucd.[CodePoint] BETWEEN 0x0DCF AND 0x0DD1
OR ucd.[CodePoint] BETWEEN 0x0DD2 AND 0x0DD4
OR ucd.[CodePoint] = 0x0DD6
OR ucd.[CodePoint] BETWEEN 0x0DD8 AND 0x0DDF
OR ucd.[CodePoint] BETWEEN 0x0DF2 AND 0x0DF3
OR ucd.[CodePoint] BETWEEN 0x0E01 AND 0x0E30
OR ucd.[CodePoint] = 0x0E31
OR ucd.[CodePoint] BETWEEN 0x0E32 AND 0x0E33
OR ucd.[CodePoint] BETWEEN 0x0E34 AND 0x0E3A
OR ucd.[CodePoint] BETWEEN 0x0E40 AND 0x0E45
OR ucd.[CodePoint] = 0x0E46
OR ucd.[CodePoint] = 0x0E4D
OR ucd.[CodePoint] BETWEEN 0x0E81 AND 0x0E82
OR ucd.[CodePoint] = 0x0E84
OR ucd.[CodePoint] BETWEEN 0x0E87 AND 0x0E88
OR ucd.[CodePoint] = 0x0E8A
OR ucd.[CodePoint] = 0x0E8D
OR ucd.[CodePoint] BETWEEN 0x0E94 AND 0x0E97
OR ucd.[CodePoint] BETWEEN 0x0E99 AND 0x0E9F
OR ucd.[CodePoint] BETWEEN 0x0EA1 AND 0x0EA3
OR ucd.[CodePoint] = 0x0EA5
OR ucd.[CodePoint] = 0x0EA7
OR ucd.[CodePoint] BETWEEN 0x0EAA AND 0x0EAB
OR ucd.[CodePoint] BETWEEN 0x0EAD AND 0x0EB0
OR ucd.[CodePoint] = 0x0EB1
OR ucd.[CodePoint] BETWEEN 0x0EB2 AND 0x0EB3
OR ucd.[CodePoint] BETWEEN 0x0EB4 AND 0x0EB9
OR ucd.[CodePoint] BETWEEN 0x0EBB AND 0x0EBC
OR ucd.[CodePoint] = 0x0EBD
OR ucd.[CodePoint] BETWEEN 0x0EC0 AND 0x0EC4
OR ucd.[CodePoint] = 0x0EC6
OR ucd.[CodePoint] = 0x0ECD
OR ucd.[CodePoint] BETWEEN 0x0EDC AND 0x0EDD
OR ucd.[CodePoint] = 0x0F00
OR ucd.[CodePoint] BETWEEN 0x0F40 AND 0x0F47
OR ucd.[CodePoint] BETWEEN 0x0F49 AND 0x0F6A
OR ucd.[CodePoint] BETWEEN 0x0F71 AND 0x0F7E
OR ucd.[CodePoint] = 0x0F7F
OR ucd.[CodePoint] BETWEEN 0x0F80 AND 0x0F81
OR ucd.[CodePoint] BETWEEN 0x0F88 AND 0x0F8B
OR ucd.[CodePoint] BETWEEN 0x0F90 AND 0x0F97
OR ucd.[CodePoint] BETWEEN 0x0F99 AND 0x0FBC
OR ucd.[CodePoint] BETWEEN 0x1000 AND 0x1021
OR ucd.[CodePoint] BETWEEN 0x1023 AND 0x1027
OR ucd.[CodePoint] BETWEEN 0x1029 AND 0x102A
OR ucd.[CodePoint] = 0x102C
OR ucd.[CodePoint] BETWEEN 0x102D AND 0x1030
OR ucd.[CodePoint] = 0x1031
OR ucd.[CodePoint] = 0x1032
OR ucd.[CodePoint] = 0x1036
OR ucd.[CodePoint] = 0x1038
OR ucd.[CodePoint] BETWEEN 0x1050 AND 0x1055
OR ucd.[CodePoint] BETWEEN 0x1056 AND 0x1057
OR ucd.[CodePoint] BETWEEN 0x1058 AND 0x1059
OR ucd.[CodePoint] BETWEEN 0x10A0 AND 0x10C5
OR ucd.[CodePoint] BETWEEN 0x10D0 AND 0x10F8
OR ucd.[CodePoint] BETWEEN 0x1100 AND 0x1159
OR ucd.[CodePoint] BETWEEN 0x115F AND 0x11A2
OR ucd.[CodePoint] BETWEEN 0x11A8 AND 0x11F9
OR ucd.[CodePoint] BETWEEN 0x1200 AND 0x1206
OR ucd.[CodePoint] BETWEEN 0x1208 AND 0x1246
OR ucd.[CodePoint] = 0x1248
OR ucd.[CodePoint] BETWEEN 0x124A AND 0x124D
OR ucd.[CodePoint] BETWEEN 0x1250 AND 0x1256
OR ucd.[CodePoint] = 0x1258
OR ucd.[CodePoint] BETWEEN 0x125A AND 0x125D
OR ucd.[CodePoint] BETWEEN 0x1260 AND 0x1286
OR ucd.[CodePoint] = 0x1288
OR ucd.[CodePoint] BETWEEN 0x128A AND 0x128D
OR ucd.[CodePoint] BETWEEN 0x1290 AND 0x12AE
OR ucd.[CodePoint] = 0x12B0
OR ucd.[CodePoint] BETWEEN 0x12B2 AND 0x12B5
OR ucd.[CodePoint] BETWEEN 0x12B8 AND 0x12BE
OR ucd.[CodePoint] = 0x12C0
OR ucd.[CodePoint] BETWEEN 0x12C2 AND 0x12C5
OR ucd.[CodePoint] BETWEEN 0x12C8 AND 0x12CE
OR ucd.[CodePoint] BETWEEN 0x12D0 AND 0x12D6
OR ucd.[CodePoint] BETWEEN 0x12D8 AND 0x12EE
OR ucd.[CodePoint] BETWEEN 0x12F0 AND 0x130E
OR ucd.[CodePoint] = 0x1310
OR ucd.[CodePoint] BETWEEN 0x1312 AND 0x1315
OR ucd.[CodePoint] BETWEEN 0x1318 AND 0x131E
OR ucd.[CodePoint] BETWEEN 0x1320 AND 0x1346
OR ucd.[CodePoint] BETWEEN 0x1348 AND 0x135A
OR ucd.[CodePoint] BETWEEN 0x13A0 AND 0x13F4
OR ucd.[CodePoint] BETWEEN 0x1401 AND 0x166C
OR ucd.[CodePoint] BETWEEN 0x166F AND 0x1676
OR ucd.[CodePoint] BETWEEN 0x1681 AND 0x169A
OR ucd.[CodePoint] BETWEEN 0x16A0 AND 0x16EA
OR ucd.[CodePoint] BETWEEN 0x16EE AND 0x16F0
OR ucd.[CodePoint] BETWEEN 0x1700 AND 0x170C
OR ucd.[CodePoint] BETWEEN 0x170E AND 0x1711
OR ucd.[CodePoint] BETWEEN 0x1712 AND 0x1713
OR ucd.[CodePoint] BETWEEN 0x1720 AND 0x1731
OR ucd.[CodePoint] BETWEEN 0x1732 AND 0x1733
OR ucd.[CodePoint] BETWEEN 0x1740 AND 0x1751
OR ucd.[CodePoint] BETWEEN 0x1752 AND 0x1753
OR ucd.[CodePoint] BETWEEN 0x1760 AND 0x176C
OR ucd.[CodePoint] BETWEEN 0x176E AND 0x1770
OR ucd.[CodePoint] BETWEEN 0x1772 AND 0x1773
OR ucd.[CodePoint] BETWEEN 0x1780 AND 0x17B3
OR ucd.[CodePoint] BETWEEN 0x17B4 AND 0x17B6
OR ucd.[CodePoint] BETWEEN 0x17B7 AND 0x17BD
OR ucd.[CodePoint] BETWEEN 0x17BE AND 0x17C5
OR ucd.[CodePoint] = 0x17C6
OR ucd.[CodePoint] BETWEEN 0x17C7 AND 0x17C8
OR ucd.[CodePoint] = 0x17D7
OR ucd.[CodePoint] = 0x17DC
OR ucd.[CodePoint] BETWEEN 0x1820 AND 0x1842
OR ucd.[CodePoint] = 0x1843
OR ucd.[CodePoint] BETWEEN 0x1844 AND 0x1877
OR ucd.[CodePoint] BETWEEN 0x1880 AND 0x18A8
OR ucd.[CodePoint] = 0x18A9
OR ucd.[CodePoint] BETWEEN 0x1E00 AND 0x1E9B
OR ucd.[CodePoint] BETWEEN 0x1EA0 AND 0x1EF9
OR ucd.[CodePoint] BETWEEN 0x1F00 AND 0x1F15
OR ucd.[CodePoint] BETWEEN 0x1F18 AND 0x1F1D
OR ucd.[CodePoint] BETWEEN 0x1F20 AND 0x1F45
OR ucd.[CodePoint] BETWEEN 0x1F48 AND 0x1F4D
OR ucd.[CodePoint] BETWEEN 0x1F50 AND 0x1F57
OR ucd.[CodePoint] = 0x1F59
OR ucd.[CodePoint] = 0x1F5B
OR ucd.[CodePoint] = 0x1F5D
OR ucd.[CodePoint] BETWEEN 0x1F5F AND 0x1F7D
OR ucd.[CodePoint] BETWEEN 0x1F80 AND 0x1FB4
OR ucd.[CodePoint] BETWEEN 0x1FB6 AND 0x1FBC
OR ucd.[CodePoint] = 0x1FBE
OR ucd.[CodePoint] BETWEEN 0x1FC2 AND 0x1FC4
OR ucd.[CodePoint] BETWEEN 0x1FC6 AND 0x1FCC
OR ucd.[CodePoint] BETWEEN 0x1FD0 AND 0x1FD3
OR ucd.[CodePoint] BETWEEN 0x1FD6 AND 0x1FDB
OR ucd.[CodePoint] BETWEEN 0x1FE0 AND 0x1FEC
OR ucd.[CodePoint] BETWEEN 0x1FF2 AND 0x1FF4
OR ucd.[CodePoint] BETWEEN 0x1FF6 AND 0x1FFC
OR ucd.[CodePoint] = 0x2071
OR ucd.[CodePoint] = 0x207F
OR ucd.[CodePoint] = 0x2102
OR ucd.[CodePoint] = 0x2107
OR ucd.[CodePoint] BETWEEN 0x210A AND 0x2113
OR ucd.[CodePoint] = 0x2115
OR ucd.[CodePoint] BETWEEN 0x2119 AND 0x211D
OR ucd.[CodePoint] = 0x2124
OR ucd.[CodePoint] = 0x2126
OR ucd.[CodePoint] = 0x2128
OR ucd.[CodePoint] BETWEEN 0x212A AND 0x212D
OR ucd.[CodePoint] BETWEEN 0x212F AND 0x2131
OR ucd.[CodePoint] BETWEEN 0x2133 AND 0x2134
OR ucd.[CodePoint] BETWEEN 0x2135 AND 0x2138
OR ucd.[CodePoint] = 0x2139
OR ucd.[CodePoint] BETWEEN 0x213D AND 0x213F
OR ucd.[CodePoint] BETWEEN 0x2145 AND 0x2149
OR ucd.[CodePoint] BETWEEN 0x2160 AND 0x2183
OR ucd.[CodePoint] = 0x3005
OR ucd.[CodePoint] = 0x3006
OR ucd.[CodePoint] = 0x3007
OR ucd.[CodePoint] BETWEEN 0x3021 AND 0x3029
OR ucd.[CodePoint] BETWEEN 0x3031 AND 0x3035
OR ucd.[CodePoint] BETWEEN 0x3038 AND 0x303A
OR ucd.[CodePoint] = 0x303B
OR ucd.[CodePoint] = 0x303C
OR ucd.[CodePoint] BETWEEN 0x3041 AND 0x3096
OR ucd.[CodePoint] BETWEEN 0x309D AND 0x309E
OR ucd.[CodePoint] = 0x309F
OR ucd.[CodePoint] BETWEEN 0x30A1 AND 0x30FA
OR ucd.[CodePoint] BETWEEN 0x30FC AND 0x30FE
OR ucd.[CodePoint] = 0x30FF
OR ucd.[CodePoint] BETWEEN 0x3105 AND 0x312C
OR ucd.[CodePoint] BETWEEN 0x3131 AND 0x318E
OR ucd.[CodePoint] BETWEEN 0x31A0 AND 0x31B7
OR ucd.[CodePoint] BETWEEN 0x31F0 AND 0x31FF
OR ucd.[CodePoint] BETWEEN 0x3400 AND 0x4DB5
OR ucd.[CodePoint] BETWEEN 0x4E00 AND 0x9FA5
OR ucd.[CodePoint] BETWEEN 0xA000 AND 0xA48C
OR ucd.[CodePoint] BETWEEN 0xAC00 AND 0xD7A3
OR ucd.[CodePoint] BETWEEN 0xF900 AND 0xFA2D
OR ucd.[CodePoint] BETWEEN 0xFA30 AND 0xFA6A
OR ucd.[CodePoint] BETWEEN 0xFB00 AND 0xFB06
OR ucd.[CodePoint] BETWEEN 0xFB13 AND 0xFB17
OR ucd.[CodePoint] = 0xFB1D
OR ucd.[CodePoint] = 0xFB1E
OR ucd.[CodePoint] BETWEEN 0xFB1F AND 0xFB28
OR ucd.[CodePoint] BETWEEN 0xFB2A AND 0xFB36
OR ucd.[CodePoint] BETWEEN 0xFB38 AND 0xFB3C
OR ucd.[CodePoint] = 0xFB3E
OR ucd.[CodePoint] BETWEEN 0xFB40 AND 0xFB41
OR ucd.[CodePoint] BETWEEN 0xFB43 AND 0xFB44
OR ucd.[CodePoint] BETWEEN 0xFB46 AND 0xFBB1
OR ucd.[CodePoint] BETWEEN 0xFBD3 AND 0xFD3D
OR ucd.[CodePoint] BETWEEN 0xFD50 AND 0xFD8F
OR ucd.[CodePoint] BETWEEN 0xFD92 AND 0xFDC7
OR ucd.[CodePoint] BETWEEN 0xFDF0 AND 0xFDFB
OR ucd.[CodePoint] BETWEEN 0xFE70 AND 0xFE74
OR ucd.[CodePoint] BETWEEN 0xFE76 AND 0xFEFC
OR ucd.[CodePoint] BETWEEN 0xFF21 AND 0xFF3A
OR ucd.[CodePoint] BETWEEN 0xFF41 AND 0xFF5A
OR ucd.[CodePoint] BETWEEN 0xFF66 AND 0xFF6F
OR ucd.[CodePoint] = 0xFF70
OR ucd.[CodePoint] BETWEEN 0xFF71 AND 0xFF9D
OR ucd.[CodePoint] BETWEEN 0xFF9E AND 0xFF9F
OR ucd.[CodePoint] BETWEEN 0xFFA0 AND 0xFFBE
OR ucd.[CodePoint] BETWEEN 0xFFC2 AND 0xFFC7
OR ucd.[CodePoint] BETWEEN 0xFFCA AND 0xFFCF
OR ucd.[CodePoint] BETWEEN 0xFFD2 AND 0xFFD7
OR ucd.[CodePoint] BETWEEN 0xFFDA AND 0xFFDC
');
-----------------------------------------------------------------------
-- Add and populate: "IsDecimal"
-----------------------------------
IF (NOT EXISTS(
SELECT *
FROM sys.columns sc
WHERE sc.[object_id] = OBJECT_ID(N'[v3-2].UnicodeCharacterDatabase')
AND sc.[name] = N'IsDecimal'))
BEGIN
ALTER TABLE [v3-2].UnicodeCharacterDatabase
ADD [IsDecimal] BIT NULL;
END;
EXEC (N'
UPDATE ucd
SET ucd.[IsDecimal] = 1
-- SELECT *
FROM [v3-2].UnicodeCharacterDatabase ucd
WHERE ucd.[DecimalDigitValue] IS NOT NULL
AND ucd.[DigitValue] IS NOT NULL
AND ucd.[NumericValue] IS NOT NULL
');
-----------------------------------------------------------------------
COMMIT TRAN;
END TRY
BEGIN CATCH
ROLLBACK TRAN;
DECLARE @ErrorMessage NVARCHAR(4000);
SET @ErrorMessage = ERROR_MESSAGE();
RAISERROR(@ErrorMessage, 16, 1);
RETURN;
END CATCH;
EXEC (N'
SELECT *
FROM [v3-2].UnicodeCharacterDatabase ucd
WHERE ucd.[IsAlphabetic] = 1
OR ucd.[IsDecimal] = 1;
');
-- 46,268 rows
GO
Comments