Şu anda Postgres üzerinde çalışmakta olan bir sorguya sahibim:Neden '% _' LIKE ile yaptığım sorgu tüm satırları döndürüyor ve yalnızca bir alt çizgi ile bitenleri değil?
SELECT * FROM addenda.users WHERE users.username LIKE '%\_'
Ancak bir alt çizgi ile biten sadece girişleri döndürmek yerine, alt çizgi içerip içermediğine bakılmaksızın tüm sonuçları geri alırım.
Aşağıdaki sorguyu çalıştırmak yalnızca bir altçizgisi olan bir kullanıcı adı döndürür, bu nedenle kaçış şu şekilde çalışır:
SELECT * FROM addenda.users WHERE users.username LIKE '\_'
Ve aşağıdaki sorguyu çalıştırmak, belirli bir harfle sona eren bir kullanıcı adı döndürür:
SELECT * FROM addenda.users WHERE users.username LIKE '%s'
Neyi yanlış yapıyorum?
Sorguyu doğrudan sunucu üzerinde çalıştırıyorum, ters eğik çizgi geçiyor. Sadece ESCAPE komutunu kullanmayı denedim ve bu tam olarak nasıl istediğimi yaptı! 'Hazırlanmış deyimi, içine bir dize eklerken –
' \ _' çizgi karakteriyle eşleşir ancak sql deyimi bir dize olduğunda, size gereken \\ _ 'yerine. Ben ilk '\' kaçar çünkü tahmin ediyorum ikinci '\' dize düzeyde, daha sonra Postgres'e azından '\ _' dizede görür ve alt çizgi karakteri ile uyuşan seviye. –
Büyük olasılıkla 'standard_conforming_strings 'ayarınıza bağlı olarak kapalıysa,' \ 'değerini ikiye katlamanız ve" e "işaretinin önüne koymanız gerekir. Sadece bir tane açıksa '' 'gereklidir. SQL'e standart dışı uzatma postgres bulunmaz – Jasen