Como usar conversões ELENCO Dados-Type com SQL

Idealmente, cada coluna em uma tabela de banco de dados SQL tem uma escolha perfeita de tipo de dados. Neste mundo não-ideal, no entanto, exatamente o que a escolha perfeita pode ser nem sempre é clara. Ao definir uma tabela de banco de dados, suponha que você atribuir um tipo de dados para uma coluna que funciona perfeitamente para o seu aplicativo atual.

Suponha que, mais tarde, você quer expandir o escopo da sua aplicação - ou escrever um aplicativo totalmente novo que usa os dados de forma diferente. Este novo uso poderia exigir um tipo de dados diferente do que você originalmente escolheu.

Você pode querer comparar uma coluna de um tipo em uma tabela com uma coluna de um tipo diferente em uma tabela diferente. Por exemplo, você poderia ter datas armazenadas como dados de caracteres em uma tabela e, como dados de data em outra mesa.

Mesmo que ambas as colunas contêm o mesmo tipo de informações (datas, por exemplo), o fato de que os tipos são diferentes podem impedi-lo de fazer a comparação. Nos padrões SQL primeiros, SQL-86 e SQL-89, tipo de incompatibilidade representava um grande problema. SQL-92, contudo, introduzida uma solução de fácil utilização no FUNDIDA expressão.

o FUNDIDA expressão converte os dados da tabela ou variáveis ​​do host de um tipo para outro tipo. Depois de fazer a conversão, você pode prosseguir com a operação ou análise que inicialmente previsto.

Naturalmente, você enfrenta algumas restrições ao usar o FUNDIDA expressão. Você não pode simplesmente indiscriminadamente converter dados de qualquer tipo em qualquer outro tipo. Os dados que você está convertendo deve ser compatível com o novo tipo de dados. Você pode, por exemplo, usar FUNDIDA para converter o CHAR (10) cadeia de caracteres '2007-04-26' ao ENCONTRO digitar.

Mas você não pode usar FUNDIDA para converter o CHAR (10) cadeia de caracteres 'rinoceronte' ao ENCONTRO digitar. Você não pode converter um INTEIRO ao SMALLINT digite se o primeiro exceder o tamanho máximo de um SMALLINT.

Você pode converter um item de qualquer tipo de personagem a qualquer outro tipo (como numérico ou data) desde o valor do item tem a forma de um literal do novo tipo. Por outro lado, é possível converter um item de um tipo qualquer para qualquer um dos tipos de caracteres, desde que o valor do produto tem a forma de um literal do tipo original.

A lista a seguir descreve algumas conversões adicionais que você pode fazer:

  • Qualquer tipo numérico para qualquer outro tipo numérico. Quando passa para um tipo menos fracionada preciso, as rodadas de sistema ou trunca o resultado.

  • Qualquer tipo numérico exacta para um único intervalo de componente, tal como DIA INTERVALO ou segundo intervalo.

  • Qualquer ENCONTRO para uma TIMESTAMP. A parte da hora do TIMESTAMP preenche com zeros.

  • Qualquer TEMPO para uma TEMPO com uma precisão de segundos fracionário diferente ou uma TIMESTAMP. A parte data do TIMESTAMP preenche com a data atual.

  • Qualquer TIMESTAMP para uma ENCONTRO, uma TEMPO, ou um TIMESTAMP com uma precisão de segundos fracionário diferente.

  • Qualquer ano-mês INTERVALO para um tipo numérico exato ou de outro ano-mês INTERVALO com uma precisão de campo líder diferente.

  • Tanto durante o dia INTERVALO para um tipo numérico exato ou de outra durante o dia INTERVALO com uma precisão de campo líder diferente.

Como usar CAST dentro do SQL

Suponha que você trabalha para uma empresa que mantém o controle de potenciais empregados, bem como os funcionários que você realmente contratados. Você lista os candidatos em uma tabela chamada PROSPECT, e você distingui-los pelos seus números de Segurança Social, que você acontecer para guardar como uma CHAR (9) digitar.

Você lista os empregados em uma tabela chamada EMPREGADO, e você distingui-los pelos seus números de Segurança Social, que são da INTEIRO digitar. Agora você deseja gerar uma lista de todas as pessoas que aparecem em ambas as tabelas. Você pode usar FUNDIDA para executar a tarefa:

SELECT * DE EMPLOYEEWHERE EMPLOYEE.SSN = CAST (PROSPECT.SSN AS INTEGER) -

Como usar CAST entre SQL ea linguagem hospedeira

O uso de chave de FUNDIDA é lidar com tipos de dados que estão disponíveis no SQL mas não na língua de acolhimento que utiliza. A lista a seguir oferece alguns exemplos destes tipos de dados:

  • SQL tem DECIMAL e NUMÉRICO, mas Fortran e Pascal não.

  • SQL tem FLUTUADOR e REAL, mas COBOL padrão não.

  • SQL tem DATA HORA, que nenhum outro idioma tem.

Suponha que você queira usar Fortran ou Pascal às tabelas de acesso com DECIMAL (5,3) colunas, e você não quer quaisquer imprecisões resultar de converter esses valores para o REAL Tipo de dados usado pelo Fortran e Pascal. Você pode executar essa tarefa usando FUNDIDA para mover os dados de e para as variáveis ​​do host caráter cordas.

Você recupera um salário numérico de 198,37 como um CHAR (10) valor de '0.000.198,37'. Então, se você deseja atualizar o salário de 203,74, você pode colocar esse valor em um CHAR (10) Como '0.000.203,74'. Primeiro você usar FUNDIDA para alterar o SQL DECIMAL (5,3) Tipo de dados para o CHAR (10) escreva para o funcionário cujo número de identificação você está armazenando na variável do host : emp_id_var, do seguinte modo:

SELECT CAST (salário como CHAR (10)) INTO: salary_varFROM EMPWHERE EmpID =: emp_id_var -

A aplicação Fortran ou Pascal examina o valor character-string resultando em : salary_var, possivelmente define a seqüência para um novo valor de '000.203,74', e atualiza o banco de dados chamando o seguinte código SQL:

ATUALIZAÇÃO EMPSET Salário = CAST (: salary_var como decimal (5,3)) onde EmpID =: emp_id_var -

Lidar com valores de caracteres de texto, como '000.198,37' é estranho em Fortran ou Pascal, mas você pode escrever um conjunto de sub-rotinas para fazer as manipulações necessárias. Você pode, então, recuperar e atualizar todos os dados SQL de qualquer língua de acolhimento, e obter - e definir - valores exatos.

A ideia geral é que FUNDIDA é mais valioso para converter entre tipos de host e o banco de dados, em vez de para a conversão dentro do banco de dados.

menu