Para chegar dígitos após / em procedimento armazenado

votos
0

Eu tenho um campo no table.Suppose seu valor é 2009 / 1234.I deseja obter dígitos antes '/'. Eu quero fazer isso no procedimento armazenado em qualquer um sql.Can ajudar?

Publicado 27/08/2009 em 07:26
fonte usuário
Em outras línguas...                            


4 respostas

votos
2

O direito maneira de fazer isso (na minha opinião, é claro, uma vez que "certo" é um termo subjetivo) seria a de modificar o esquema para que esses valores são separados.

Em outras palavras, 2009 e 1234 estaria em colunas diferentes.

É quase sempre uma má idéia, em termos de velocidade e escalabilidade, para usar funções por-linha em suas instruções select. Isso porque o DBMS tem de realizar cálculos em cada única linha extrai, cada vez que extrai-lo.

Se você é obrigado a mantê-los como uma única coluna, um truque que eu usei no passado é usar um disparador de inserção / atualização com duas colunas extras para receber as peças, então você teria:

SomeFields       |   Data    | PostSlash
-----------------+-----------+----------
blah, blah, blah | 2009/1234 | 1234

Sim, eu sei que isso não é 3NF ideal, mas é perfeitamente aceitável para quebrar que, por razões de desempenho, se você fizer isso direito. Os gatilhos vai garantir as colunas sempre corresponder e você verá que suas consultas correr muito mais rápido à custa mínima do gatilho e a duplicação de dados.

Mas é melhor fazer essa divisão uma vez quando uma linha é criado ou atualizado em vez de cada vez que você lê-lo. Isso porque os bancos de dados são geralmente ler muito mais frequentemente do que eles são escritos. A despesa gatilho é amortizado em todos os seleciona.

Tenha em mente que, se a tabela é pequena ou (por alguma razão bizarra) escrito mais frequentemente do que ler, você pode ser melhor fora de usar funções por-linha.

Respondeu 27/08/2009 em 07:31
fonte usuário

votos
2

Assumindo que você pode garantir a barra e existirá dígitos:

 SELECT SUBSTRING(myfield, CHARINDEX('/', myfield)+1, 1000) FROM mytable;
Respondeu 27/08/2009 em 07:30
fonte usuário

votos
1

Para obter os dígitos antes da barra, assumindo a barra sempre existe:

SELECT LEFT(columnname, CHARINDEX('/', columnname, 1) - 1) FROM aTable
Respondeu 27/08/2009 em 09:29
fonte usuário

votos
1

SUBSTRING (MyValue, CHARINDEX ( '/', MyValue) + 1, 8000)

Respondeu 27/08/2009 em 07:31
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more