name
Revenge
Royal Sovereign
ΠΠ°ΡΠ½Π°Ρ ΠΊ LEFT ΡΡΠ½ΠΊΡΠΈΡ RIGHT Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠΏΡΠ°Π²Π° ΠΈΠ· ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ:
ΠΠΎΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π±ΡΠΊΠ²Ρ:
SELECT name FROM Ships WHERE LEFT(name, 1) = RIGHT(name, 1)
Π’ΠΎ, ΡΡΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΡΡΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΈΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Π½Π΅Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ - ΠΊΠ»Π°ΡΡ ΠΈ ΠΈΠΌΡ ΠΊΠΎΡΠ°Π±Π»Ρ.
Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠ΅ΠΉ, ΠΈ Π² SQL Server Π΄Π»Ρ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π·Π½Π°ΠΊ "+" (Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ "||"). ΠΡΠ°ΠΊ,
SELECT * FROM (
SELECT class +' '+ name AS cn FROM Ships
) x
WHERE LEFT(cn, 1)=RIGHT(cn, 1)
ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΈΠΌΡ ΠΊΠΎΡΠ°Π±Π»Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ Π²ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠΎΠ΄Π·Π°ΠΏΡΠΎΡ. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄:
cn
Iowa Missouri
North Carolina Washington
Π Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½Ρ Π±ΡΠΊΠ²Ρ? ΠΠ°ΠΏΡΠΎΡ Π²ΡΠ²Π΅Π΄Π΅Ρ Π΅Π΅. Π ΡΡΠΎΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, Π½Π°ΠΏΠΈΡΠ°Π²
SELECT * FROM (
SELECT class +' '+ name AS cn FROM Ships
UNION ALL
SELECT 'a' as nc
) x
WHERE LEFT(cn, 1)=RIGHT(cn, 1)
, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΡΡΠΎΠΊΠ΅. ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠΌΡΡ ΡΠ»ΡΡΠ°Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ:
SELECT * FROM (
SELECT class +' '+ name AS cn FROM Ships
UNION ALL
SELECT 'a' as nc
) x
WHERE LEFT(cn, 1)=RIGHT(cn, 1) AND LEN(cn)1
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² MS SQL Server ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ΅ Π΄Π»ΠΈΠ½Ρ Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅Π²ΡΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
DECLARE @chr AS CHAR(12), @vchr AS VARCHAR(12)
SELECT @chr = 'abcde' + REPLICATE(' ', 5), @vchr = 'abcde'+REPLICATE(' ', 5)
SELECT LEN(@chr), LEN(@vchr)
SELECT DATALENGTH(@chr), DATALENGTH(@vchr)
5
5
12
10
Π€ΡΠ½ΠΊΡΠΈΡ REPLICATE Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ 'abcde' ΠΏΡΡΡΡ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΡΠΏΡΠ°Π²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ LEN, - Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ 5.
Π€ΡΠ½ΠΊΡΠΈΡ DATALENGTH Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ Π±Π°ΠΉΡΠΎΠ² Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π½Π°ΠΌ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΏΠ°ΠΌΠΈ CHAR ΠΈ VARCHAR. DATALENGTH Π΄Π°ΡΡ Π½Π°ΠΌ 12 Π΄Π»Ρ ΡΠΈΠΏΠ° CHAR ΠΈ 10 - Π΄Π»Ρ VARCHAR.
ΠΠ°ΠΊ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, DATALENGTH Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° VARCHAR Π²Π΅ΡΠ½ΡΠ»Π° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ Π΄Π»ΠΈΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠΎ ΠΏΠΎΡΠ΅ΠΌΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° CHAR ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΡΠ°Π²Π½ΡΠΌ 12? ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ CHAR - ΡΡΠΎ ΡΠΈΠΏ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ Π΅Π΅ Π΄Π»ΠΈΠ½Ρ, Π° Π΄Π»ΠΈΠ½Ρ ΠΌΡ ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ CHAR(12), ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡΠ΄Π΅Ρ "Π²ΡΡΠΎΠ²Π½Π΅Π½ΠΎ" Π΄ΠΎ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Ρ Π·Π° ΡΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π²ΡΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ².
ΠΠ° ΡΠ°ΠΉΡΠ΅ ΠΈΠΌΠ΅ΡΡΡΡ Π·Π°Π΄Π°ΡΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΡΡ (Π½Π°ΠΉΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΈ Ρ.Π΄.) Π² ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎΠΌΠ΅Ρ ΠΌΠ΅ΡΡΠ° Π² ΡΠ°ΠΌΠΎΠ»Π΅ΡΠ΅ ("2d") ΠΈΠ»ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ CD ("24x"). ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΊΡΡ ΡΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΊ (ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ)
11a
1a
2a
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ,
SELECT '1a' AS place
UNION ALL SELECT '2a'
UNION ALL SELECT '11a'
ORDER BY 1
ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΡΡ ΠΌΠ΅ΡΡΠ° Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΡΡΠ΄ΠΎΠ², ΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°ΠΊΠΎΠΉ
1a
2a
11a
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠΈΠΌ Π² ΡΠ΅ΠΊΡΡΠ΅. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ:
1. ΠΠ·Π²Π»Π΅ΡΡ ΡΠΈΡΠ»ΠΎ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ.
2. ΠΡΠΈΠ²Π΅ΡΡΠΈ Π΅Π³ΠΎ ΠΊ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΌΡ ΡΠΎΡΠΌΠ°ΡΡ.
3. ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π’.ΠΊ. Π½Π°ΠΌ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ Π±ΡΠΊΠ²Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°, ΡΠΎ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΈΡΠ»Π° ΡΠΈΡΡ Π² Π½ΠΎΠΌΠ΅ΡΠ΅ ΠΌΠ΅ΡΡΠ°:
LEFT(place, LEN(place)-1)
ΠΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΠΌ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡΡΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ
place
1a
11a
2a
ΠΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΌΡ ΡΠΎΡΠΌΠ°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ:
CAST (LEFT(place, LEN(place)-1) AS INT)
ΠΡΡΠ°Π»ΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ
SELECT * FROM (
SELECT '1a' AS place
UNION ALL SELECT '2a'
UNION ALL SELECT '11a'
) x
ORDER BY CAST(LEFT(place, LEN(place)-1) AS INT)
Π§ΡΠΎ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π΄ΠΎΠΊΠ°Π·Π°ΡΡ.
Π Π°Π½Π΅Π΅ ΠΌΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ LEFT, Ρ.ΠΊ. Π½Π°ΠΌ Π±ΡΠ»ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π°ΠΏΡΠΈΠΎΡΠΈ, ΠΊΠ°ΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½ΡΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΡΠΏΡΠ°Π²Π° (ΠΎΠ΄ΠΈΠ½). Π Π΅ΡΠ»ΠΈ ΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ· ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ Π½Π΅ ΠΏΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°, Π° ΠΏΠΎ ΡΠ°ΠΌΠΎΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: ΠΈΠ·Π²Π»Π΅ΡΡ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π±ΡΠΊΠ²Ρ "Ρ " (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ CD).
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΡ CHARINDEX, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°:
SELECT model, LEFT(cd, CHARINDEX('x', cd) -1) FROM PC
Π€ΡΠ½ΠΊΡΠΈΡ SUBSTRING
SUBSTRING (<Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, <Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ, <Π΄Π»ΠΈΠ½Π° )
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΡΠ°ΡΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, Π½Π°ΡΠΈΠ½Π°Ρ ΠΎΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ text ΠΈΠ»ΠΈ image. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ 3 ΡΠΈΠΌΠ²ΠΎΠ»Π° Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ, Π½Π°ΡΠΈΠ½Π°Ρ ΡΠΎ 2-Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°, ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π±Π΅Π· ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ SUBSTRING Π±ΡΠ΄Π΅Ρ Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ. Π ΡΠ°ΠΊ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ:
SELECT name, SUBSTRING(name, 2, 3) FROM Ships
Π ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ, ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
SELECT name, SUBSTRING(name, 2, LEN(name)) FROM Ships
Π΄Π°ΡΡ Π½Π°ΠΌ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² Π½Π°Π·Π²Π°Π½ΠΈΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ ΠΎΡ Π²ΡΠΎΡΠΎΠΉ Π±ΡΠΊΠ²Ρ Π² ΠΈΠΌΠ΅Π½ΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΡΠ½ΠΊΡΠΈΡ LEN(name), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΈΠΌΠ΅Π½ΠΈ. ΠΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ½Π΅ Π½ΡΠΆΠ½Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, Π½Π°ΡΠΈΠ½Π°Ρ ΡΠΎ Π²ΡΠΎΡΠΎΠ³ΠΎ, ΡΠΎ ΠΈΡ ΡΠΈΡΠ»ΠΎ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΈΠΌΠ΅Π½ΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΠΎ Π±ΡΠ΄ΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Ρ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ. ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΈ Π±Π΅ΡΡ ΠΈΡ Ρ Π·Π°ΠΏΠ°ΡΠΎΠΌ, Π½Π΅ ΡΡΡΡΠΆΠ΄Π°Ρ ΡΠ΅Π±Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ REVERSE
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΠΊΠ°ΠΊ Π±Ρ ΡΠΈΡΠ°Ρ Π΅Π΅ ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ. Π’.Π΅. ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ°
SELECT REVERSE('abcdef')
Π±ΡΠ΄Π΅Ρ 'fedcba'. ΠΡΠ»ΠΈ Π±Ρ Π² ΡΠ·ΡΠΊΠ΅ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°Π»Π° ΡΡΠ½ΠΊΡΠΈΡ RIGHT, ΡΠΎ Π·Π°ΠΏΡΠΎΡ
SELECT RIGHT('abcdef',3)
ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ°Π²Π½ΠΎΡΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠΌ
SELECT REVERSE(LEFT(REVERSE('abcdef'),3))
Π― Π²ΠΈΠΆΡ ΠΏΠΎΠ»ΡΠ·Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ. ΠΡΡΡΡ Π½Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ, Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° (ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²) Π² ΡΡΡΠΎΠΊΠ΅. ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ»ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° "Π°" Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ "California":
SELECT CHARINDEX('a', name) first_a
FROM Ships WHERE name='California'
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π² ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° "Π°". Π€ΡΠ½ΠΊΡΠΈΡ
CHARINDEX('a', REVERSE(name))
ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΉΡΠΈ ΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π½ΠΎ ΡΠΏΡΠ°Π²Π°. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΠ»Π΅Π²Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ
SELECT LEN(name) + 1 - CHARINDEX('a', REVERSE(name)) first_a
FROM Ships WHERE name='California'
Π€ΡΠ½ΠΊΡΠΈΡ REPLACE
REPLACE ( <ΡΡΡΠΎΠΊΠ°1 , <ΡΡΡΠΎΠΊΠ°2 , <ΡΡΡΠΎΠΊΠ°3 )
ΠΠ°ΠΌΠ΅Π½ΡΠ΅Ρ Π² ΡΡΡΠΎΠΊΠ΅1 Π²ΡΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ2 Π½Π° ΡΡΡΠΎΠΊΡ3. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (UPDATE), Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ (ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ) ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠ»Π±ΡΠ°. ΠΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ Π΄Π΅ΡΠΈΡΠΎΠΌ Π² Π½Π°Π·Π²Π°Π½ΠΈΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ
UPDATE Ships
SET name = REPLACE(name, ' ', '-')
(ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Ρ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡΠΌΠΈ DML, Π³Π΄Π΅ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ )
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ . ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π±ΡΠΊΠ²Π° "a". ΠΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠ°: Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΡΠΊΠΎΠΌΡΡ Π±ΡΠΊΠ²Ρ Π΄Π²ΡΠΌΡ Π»ΡΠ±ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠΈΡΠ°Π΅ΠΌ ΡΠ°Π·Π½ΠΎΡΡΡ Π΄Π»ΠΈΠ½ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΈΡΠΊΠΎΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ°ΠΊ,
SELECT name, LEN(REPLACE(name, 'a', 'aa')) - LEN(name) FROM Ships
Π Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΈΡΠ»ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ? ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΈΡΠΊΠΎΠΌΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ:
DECLARE @str AS VARCHAR(100)
SET @str='ma'
SELECT name, (LEN(REPLACE(name, @str, @str + @str)) - LEN(name))/LEN(@str) FROM Ships
ΠΠ»Ρ ΡΠ΄Π²ΠΎΠ΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΈΡΠΊΠΎΠΌΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»Π°ΡΡ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ - @str + @str . ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΡΡΠ½ΠΊΡΠΈΡ - REPLICATE, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°Π·, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°Π΄Π°Π΅ΡΡΡ Π²ΡΠΎΡΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ.