@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มิฉะนั้นคุณจะได้รับการแปลงต่อแถว)