Obtenez tout avant un certain caractère dans SQL
J'ai obtenu les données suivantes dans ma base de données:
E01234-1-1
E01234444-1-800000000
Je veux de la garniture à l'entrée et j'obtiens donc:
E01234-1
E01234444-1
Donc, fondamentalement, je veux que tout soit avant la seconde,' -', indépendamment de la longueur
Comment puis-je le résoudre? Im en utilisant MS SQL SERVER 2012
Je suis en utilisant cela, mais seulement apporter des données datant d'avant le premier trait d'union, pas de deuxième tiret
DECLARE @TABLE TABLE (STRING VARCHAR(100))
INSERT INTO @TABLE (STRING)
SELECT 'E01234-1-1'
UNION ALL SELECT 'E01234-1-200'
UNION ALL SELECT 'E01234-1-3000'
UNION ALL SELECT 'E01234-1-40000'
UNION ALL SELECT 'E01234-1-500000'
UNION ALL SELECT 'E01234-1-6000000'
UNION ALL SELECT 'E01234-1-70000000'
UNION ALL SELECT 'E01234444-1-800000000'
SELECT LEFT(STRING, CHARINDEX('-',STRING)-1) STRIPPED_STRING from @TABLE
RETOURNE
E01234
E01234
E01234
E01234
E01234
E01234
E01234
E01234444
- im en utilisant ms sql server 2012
- Est la deuxième
-
toujours le dernier? - Double Possible de texte SQL avant Énième match?
Vous devez vous connecter pour publier un commentaire.
Si vous avez besoin de la deuxième
-
:Explication:
CHARINDEX
vous permet d'obtenir l'indice de la-
- le faire deux fois (+ 1) précise que la outterCHARINDEX
devrait commencer à l'endroit après la première-
dans la chaîne.Si vous voulez couper tout ce qui est après le dernier
-
à la place (peu importe si c'est la deuxième ou pas):Cette fois, vous obtenez la
CHARINDEX
de la dernière (inverse de la chaîne)-
, et déduire de la longueur de l'ensemble de la chaîne.Essayez ceci:
Si vous utilisez MySQL utiliser quelque chose comme ceci:
SUBSTRING_INDEX
[sql]
tag. Peut-être juste mentionner que ce serait travailler pour MySQL?)