2010-06-17 3 views
1

E.g.Comment faire pour annuler une chaîne (SQL Server 2005, SET BASED)

Declare @str varchar2(20) 
Set @str = 'A Student' 
Select Reverse(@str) 

sortie:

tnedutS A 

être prévu:

Student A 

La sortie (à l'aide du revers) est comme prévu. Mais mon exigence est celle décrite.

Besoin d'aide avec SET BASED.

J'utilise SQL Server 2005

+0

@marc_s - il semble que l'exigence est d'inverser la _word_ order, pas l'ordre des caractères. De "Student A" à "A Student". On dirait un udf personnalisé pour moi ... –

Répondre

1

Modifier La réponse originale a mal compris l'exigence. J'ai corrigé une difficulté, mais la répartition au niveau du personnage est complètement inutile maintenant. Au moins, cela pourrait donner quelques idées!

WITH Strings AS 
(
select 'A Student' as String 
UNION ALL 
select 'blah' as String 
UNION ALL 
select 'the quick brown fox jumped over the lazy dog' as String 
), 
SplitChars As 
(
SELECT ROW_NUMBER() OVER (ORDER BY number) AS number, String, SUBSTRING(String,number,1) AS Ch FROM Strings 
JOIN master.dbo.spt_values on number BETWEEN 1 AND LEN(String) AND type='P' 
) 


SELECT String, 
replace(Stuff(
      (
      Select '' + Ch 
      From SplitChars SC3 
      WHERE SC3.String = SC.String 
      Order By (SELECT COUNT(*) FROM SplitChars SC2 WHERE SC2.String = SC3.String AND SC2.Ch = ' ' AND SC2.number < SC3.number) desc, case when SC3.ch = ' ' then -1 else number end 
      For Xml Path('') 
      ),1, 0, ''), '&#x20;', ' ') AS Reversed 
FROM SplitChars SC 
GROUP BY String 

Retours

  • Un étudiant
  • bla
  • chien paresseux le plus sauté renard brun rapide les
1

On dirait que vous devez diviser vous chaîne en jetons. Voir ce qui suit pour plusieurs façons de le faire. Évidemment, vous devrez définir le délimiteur sur ''.

Vous pouvez ensuite reconstruire votre chaîne en lisant les éléments dans l'ordre inverse.

Questions connexes