@mainString = 'CATCH ME IF YOU CAN'
ฉันสตริง ฉันต้องการตรวจสอบว่าคำME
นั้นอยู่ข้างใน@mainString
หรือไม่
ฉันจะตรวจสอบว่าสตริงมีสตริงย่อยเฉพาะใน SQL ได้อย่างไร
@mainString = 'CATCH ME IF YOU CAN'
ฉันสตริง ฉันต้องการตรวจสอบว่าคำME
นั้นอยู่ข้างใน@mainString
หรือไม่
ฉันจะตรวจสอบว่าสตริงมีสตริงย่อยเฉพาะใน SQL ได้อย่างไร
คำตอบ:
CHARINDEX () ค้นหาสตริงย่อยภายในสตริงที่มีขนาดใหญ่กว่าและส่งคืนตำแหน่งของการจับคู่หรือ 0 หากไม่พบคู่ที่ตรงกัน
if CHARINDEX('ME',@mainString) > 0
begin
--do something
end
แก้ไขหรือจากคำตอบแดเนียลส์หากคุณต้องการค้นหาคำ (และไม่ใช่คำย่อย) การโทร CHARINDEX ของคุณจะมีลักษณะดังนี้:
CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')
(เพิ่มการเรียกซ้ำ REPLACE () เพิ่มเติมสำหรับเครื่องหมายวรรคตอนอื่น ๆ ที่อาจเกิดขึ้น
REPLACE
เรียกว่าตัวเอง "ซ้อน" คือเมื่อผลลัพธ์ของการเรียกฟังก์ชันถูกส่งผ่านไปยังฟังก์ชันอื่นทันที
select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home')
select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home')
(ในการเปรียบเทียบCS
หมายถึง Case Sensitive และฉันแน่ใจว่าคุณสามารถออกกำลังกายได้CI
)
คุณสามารถใช้ wildcard ในเพรดิเคต (หลังจาก IF, WHERE หรือ ON):
@mainstring LIKE '%' + @substring + '%'
หรือในกรณีนี้โดยเฉพาะ
' ' + @mainstring + ' ' LIKE '% ME[., ]%'
(ใส่ช่องว่างในสตริงที่ยกมาหากคุณกำลังมองหาทั้งคำหรือปล่อยให้พวกเขาออกถ้าฉันสามารถเป็นส่วนหนึ่งของคำที่ใหญ่กว่า)
N
ถ้าคอลัมน์ของคุณเป็นnvarchar
มิฉะนั้นคุณจะได้รับการแปลงต่อแถว)