Er zijn twee verschillende gedragingen in het antwoord van Cade Roux:vervanging is succesvol (wanneer SQL-sortering wordt gebruikt) en niet-succesvolle (Windows-sortering wordt gebruikt). De reden ligt in het type sortering dat wordt gebruikt.
Dit gedrag is bijna 4 jaar geleden bij Microsoft ingediend:
V: Wanneer u een NUL-teken probeert te vervangen met Replace(), werkt dit als de waarde een SQL-sortering heeft, maar geen Windows-sortering.
A: Dit komt door het feit dat 0x0000 een ongedefinieerd teken is in Windows-collations. Alle niet-gedefinieerde tekens worden genegeerd tijdens vergelijking, sortering en patroonafstemming. Dus zoeken naar'a' + char(0) is echt zoeken naar'a', en zoeken naar char(0) is gelijk aan lege string.
De manier om met ongedefinieerde karakters om te gaan is een beetje verwarrend, maar dit is de manier die Windows heeft gedefinieerd om ze te sorteren, en SQL Server voldoet aan de algemene Windows API.
In SQL-sortering is er geen notie van een ongedefinieerd teken. Elk codepunt krijgt een gewicht toegewezen, daarom zien we daar geen probleem.
maar helaas is het nog steeds niet gedocumenteerd.
Het lijkt er dus op dat de enige oplossing is om de sortering te wijzigen in SQL-sortering (bijv. SQL_Latin1_General_CP1_CI_AS
kan ook worden gebruikt).
Ik heb mijn vorige antwoord verwijderd omdat het niet nodig was