Listagem de Códigos ASCII em uma coluna no MS SQL

quarta-feira, 30 de janeiro de 2013


Quem trabalha com importações e exportações de texto baseado, principalmente, em arquivos texto que utilizam caractere separador de coluna (CSV), pode enfrentar problemas quando em alguma coluna da extração ou importação contenha caracteres que são utilizados para separação de valores. Por exemplo, se for utilizado a tabulação como separador de colunas, caso exista alguma tabulação dentro do valor da coluna, irá comprometer todo o processo pois será entendido como uma coluna a mais na base de dados.
Para casos onde há existência no próprio campo o caractere separador, muitas vezes a abordagem é realizar a padronização/uniformização dos dados antes de iniciar os processo de carga ou extração, cuja função é exatamente remover tais caracteres utilizados como separadores de colunas.
Abaixo segue um procedimento a ser utilizado no MS SQL que tem o objetivo de mostrar o código ASCII de cada caractere presente em uma determinada coluna de um registro. Desta forma fica mais fácil investigar a existência de caracteres não visíveis, dentre eles, a tabulação e retorno de linha e que podem ser utilizados como separadores de colunas.

DECLARE @counter int = 1;
DECLARE @colString varchar(10) = 'AA%#&    ';

WHILE @counter <= DATALENGTH(@colString)
   BEGIN
   SELECT CHAR(ASCII(SUBSTRING(@colString, @counter, 1))) as [Character],
   ASCII(SUBSTRING(@colString, @counter, 1)) as [ASCIIValue]
     
   SET @counter = @counter + 1
   END
GO

O resultado é apresentado conforme a figura abaixo:


Via SQL Query Curry.

Abaixo seguem os caracteres não imprimíveis do código ASCII:

ASCII control characters non printable:

ASCII code 00 = NULL ( Null character )
ASCII code 01 = SOH ( Start of Header )
ASCII code 02 = STX ( Start of Text )
ASCII code 03 = ETX ( End of Text, hearts card suit )
ASCII code 04 = EOT ( End of Transmission, diamonds card suit )
ASCII code 05 = ENQ ( Enquiry, clubs card suit )
ASCII code 06 = ACK ( Acknowledgement, spade card suit )
ASCII code 07 = BEL ( Bell )
ASCII code 08 = BS ( Backspace )
ASCII code 09 = HT ( Horizontal Tab )
ASCII code 10 = LF ( Line feed )
ASCII code 11 = VT ( Vertical Tab, male symbol, symbol for Mars )
ASCII code 12 = FF ( Form feed, female symbol, symbol for Venus )
ASCII code 13 = CR ( Carriage return )
ASCII code 14 = SO ( Shift Out )
ASCII code 15 = SI ( Shift In )
ASCII code 16 = DLE ( Data link escape )
ASCII code 17 = DC1 ( Device control 1 )
ASCII code 18 = DC2 ( Device control 2 )
ASCII code 19 = DC3 ( Device control 3 )
ASCII code 20 = DC4 ( Device control 4 )
ASCII code 21 = NAK ( NAK Negative-acknowledge )
ASCII code 22 = SYN ( Synchronous idle )
ASCII code 23 = ETB ( End of trans. block )
ASCII code 24 = CAN ( Cancel )
ASCII code 25 = EM ( End of medium )
ASCII code 26 = SUB ( Substitute )
ASCII code 27 = ESC ( Escape )
ASCII code 28 = FS ( File separator )
ASCII code 29 = GS ( Group separator )
ASCII code 30 = RS ( Record separator )
ASCII code 31 = US ( Unit separator )
ASCII code 127 = DEL ( Delete )

Nenhum comentário:

Postar um comentário