month - Prueba de mayúsculas-T-Sql
substring sql (3)
Todos,
¿Cómo puedo verificar si un carácter varchar especificado o una cadena completa están en mayúsculas en T-Sql? Idealmente, me gustaría escribir una función para probar si un carácter está en mayúsculas, luego puedo aplicarlo a un varchar genérico. Debe devolver falso para caracteres no alfabéticos. Sólo me interesan los caracteres del idioma inglés.
Estoy trabajando con T-sql en SQL Management Studio, y he intentado extraer registros que comienzan con minúsculas de una tabla de esta manera:
select * from TABLE
where SUBSTRING(author,1,1) != LOWER(SUBSTRING(author,1,1))
Lo que devuelve 0 registros, pero sé que hay registros que comienzan con mayúsculas y minúsculas.
Gracias
EDITAR: Dado que tanto podiluska como joachim-isaksoon han respondido exitosamente a mi pregunta (ambos métodos funcionan para mis propósitos), ¿le importaría a alguien explicar cuál sería el método más eficiente para consultar una tabla con una gran cantidad de registros para filtrar registros? ¿Con autores que comienzan con o sin mayúscula?
Para verificar si ch es mayúscula, y es un carácter que se puede convertir entre mayúscula y minúscula (es decir, excluyendo caracteres no alfabéticos);
WHERE UNICODE(ch) <> UNICODE(LOWER(ch))
Usando colaciones
p.ej:
if (''a''=''A'' Collate Latin1_General_CI_AI)
print''same 1''
else
print ''different 1''
if (''a''=''A'' Collate Latin1_General_CS_AI)
print''same 2''
else
print ''different 2''
La CS en el nombre de colación indica mayúsculas y minúsculas (y IC, mayúsculas y minúsculas). El AI / AS se relaciona con la sensibilidad del acento.
o en tu ejemplo
SUBSTRING(author,1,1) <> LOWER(SUBSTRING(author,1,1)) COLLATE Latin1_General_CS_AI
algo como
declare @v varchar(10) = ''ABC'', @ret int = 0
select @ret = 1 where upper(@v)=@v COLLATE SQL_Latin1_General_CP1_CS_AS
select @ret