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?
Para chegar dígitos após / em procedimento armazenado
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.
Assumindo que você pode garantir a barra e existirá dígitos:
SELECT SUBSTRING(myfield, CHARINDEX('/', myfield)+1, 1000) FROM mytable;
Para obter os dígitos antes da barra, assumindo a barra sempre existe:
SELECT LEFT(columnname, CHARINDEX('/', columnname, 1) - 1) FROM aTable

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