--===== Create a table with a real auto-incrementing column and -- a persisted formula to convert it to Base 26 automatically. -- The auto-incrementing column is "Zero Based" to keep things simple. -- Max value = 26^7-1 = 8,031,810,175 > Largest INT CREATE TABLE #MyHead ( MyHeadID INT IDENTITY(0,1) NOT NULL, Base26ID AS CHAR(MyHeadID/308915776%26+65) --26^6 + CHAR(MyHeadID/11881376%26+65) --26^5 + CHAR(MyHeadID/456976%26+65) --26^4 + CHAR(MyHeadID/17576%26+65) --26^3 + CHAR(MyHeadID/676%26+65) --26^2 + CHAR(MyHeadID/26%26+65) --26^1 + CHAR(MyHeadID%26+65) --26^0 PERSISTED NOT NULL, SomeString VARCHAR(36) NOT NULL )--===== Add a million+1 rows of "something" to the table -- just to prove it works. INSERT INTO #MyHead (SomeString) SELECT TOP 1000001 NEWID() AS SomeString FROM Master.sys.All_Columns ac1 CROSS JOIN Master.sys.All_Columns ac2--===== Show what's in the table SELECT * FROM #MyHead
SELECT * FROM #MyHead WHERE Base26ID LIKE '%CRAP%'
CREATE FUNCTION dbo.Base21--===== This function accepts an integer and returns mostly harmless -- "numbering" using letters with all vowels removed. -- Jeff Moden (@Integer INT)RETURNS VARCHAR(8) AS BEGINDECLARE @Return VARCHAR(8);WITHcteAllowed AS( SELECT 'BCDFGHJKLMNPQRSTVWXYZ' AS Letters) SELECT @Return = SUBSTRING(Letters, @Integer/1801088541%21+1, 1) --21^7 + SUBSTRING(Letters, @Integer/85766121%21+1, 1) --21^6 + SUBSTRING(Letters, @Integer/4084101%21+1, 1) --21^5 + SUBSTRING(Letters, @Integer/194481%21+1, 1) --21^4 + SUBSTRING(Letters, @Integer/9261%21+1, 1) --21^3 + SUBSTRING(Letters, @Integer/441%21+1, 1) --21^2 + SUBSTRING(Letters, @Integer/21%21+1, 1) --21^1 + SUBSTRING(Letters, @Integer%21+1, 1) --21^0 FROM cteAllowed; RETURN @Return ENDGO
--===== Create a table with a real auto-incrementing column and -- a persisted formula to convert it to Base 21 (no vowels) automatically. -- The auto-incrementing column is "Zero Based" to keep things simple. CREATE TABLE #MyHead ( MyHeadID INT IDENTITY(0,1) NOT NULL, Base21ID AS dbo.Base21(MyHeadID) , SomeString VARCHAR(36) NOT NULL )--===== Add a million+1 rows of "something" to the table -- just to prove it works. INSERT INTO #MyHead (SomeString) SELECT TOP 1000000 NEWID() AS SomeString FROM Master.sys.All_Columns ac1 CROSS JOIN Master.sys.All_Columns ac2--===== Show what's in the table SELECT * FROM #MyHead