Ok, como o título sugere, isso está ocorrendo.
Ao usar a REPLACE
função em char(185) para dados em uma tabela temporária, os ("1") também estão sendo removidos.
Dados do SQL SERVER 2008R2
UNICODE
Agrupamento de banco de dados - agrupar SQL_Latin1_General_CP1_CS_AS Tempdb tem padrão
Qualquer outro detalhe que eu possa fornecer que possa ser útil, me avise.
CHAR(185)
, sendo dados VARCHAR e usando uma página de código de 8 bits, pode ser um caractere diferente dependendo da página de código que está sendo usada (que é determinada pelo agrupamento do banco de dados atual ao usar aCHAR()
função). Em muitas páginas de código, incluindo a comum Windows-1252 (Latin1_General), o caractere é um sobrescrito 1 (ou seja, " 1 "). Esse caractere, dependendo da página de agrupamento/código que está sendo usada, pode ter um mapeamento de "melhor ajuste" para um "1" normal.Além disso, ao usar um agrupamento do Windows, a diferenciação entre maiúsculas e minúsculas pode afetar o resultado de correspondências entre subscrito, sobrescrito e versões regulares dos mesmos caracteres (sério! veja o exemplo abaixo). Isso também abrange
NVARCHAR
dados / Unicode (incluindo UTF-8 aVARCHAR
partir do SQL Server 2019).Ao precisar corresponder em caracteres específicos, você precisa usar um agrupamento binário (ou seja, um que termine em
_BIN2
, a menos que no SQL Server 2005 ou anterior, caso em que apenas os_BIN
agrupamentos estão disponíveis).Conforme observado acima, os dados Unicode (independentemente do tipo de agrupamento) funcionam da mesma forma que
VARCHAR
os dados usados com um agrupamento do Windows (porque ambos os cenários usam as mesmas regras Unicode):Caso alguém queira saber - o problema era o agrupamento. Quando escrevi a pergunta, não percebi que a tabela #temp que estava usando tinha um agrupamento diferente do padrão para o banco de dados em que estava trabalhando. Foi uma solução simples e honestamente algo que eu deveria ter pensado muito antes de vir aqui com perguntas.