upper month isdate ejemplo day convert cast sql sql-server tsql

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))

Un SQLfiddle para probar con ;


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