2015-12-14 18 views
11

Nella tabella sono presenti valori stringa che includono caratteri ebraici (o qualsiasi lingua R-T-L per questo caso) e inglesi (o numeri).Caratteri inversi in una stringa con lingue miste da sinistra a destra e da destra a sinistra utilizzando SQL?

Il problema è che i caratteri inglesi sono invertiti e assomiglia a: בדיקה 123456 esrever sti fI kcehC. I numeri e i caratteri inglesi sono invertiti, quelli ebraici vanno bene.

Come è possibile utilizzare le funzioni SQL incorporate per identificare la sottostringa inglese (e i numeri) e invertirla mantenendo l'ordine sugli altri caratteri RTL? Qualsiasi soluzione farà :-) ... grazie

+1

La risposta accettata qui può essere di qualche utilità per voi: http://stackoverflow.com/questions/22459446/how-to-fix-reversed-arabic-characters-mixed-with-english- in-sql-server – beercohol

+0

È limitato solo all'inglese? Che cosa succede se il testo francese, svedese o anche tedesco con il personaggio di Eszett al posto di una doppia s? – NicVerAZ

risposta

0

Non ho mai lavorato con caratteri ebraici, quindi non sono sicuro se questo funzionerà,

Tuttavia penso che si può implementare una funzione con un po ' ciclo usando patindex

  • avrete bisogno di una variabile per tenere la parte inglese invertito @EngTemp
  • una variabile per contenere la sottostringa in corso di elaborazione @SubTemp
  • una variabile per contenere il testo rimanente nelle s tring che deve ancora essere elaborato @SubNext
  • una variabile per contenere la lunghezza della stringa corrente @Len
  • una variabile di uscita @Out

Procedura:

  • Prendere un ingresso stringa , metterlo in @SubNext mentre PATINDEX ('% [^ az]%', @SubNext)> 0
  • stringa al negozio indice di Pat in @SubTemp, anche tagliare @SubNext al patindex
  • memorizza la lunghezza di @SubTemp in @Len
  • se @Len> 1; set @Out = @Out + @EngTemp + @SubTemp; Set @EngTemp = '' (Questo passaggio presuppone la possibilità che possano verificarsi casi in cui la stringa inglese non è la fine della riga)
  • se @Len = 1; set @EngTemp = @SubTemp + @EngTemp
  • se @Len = 0; set @Out = @Out + @EngTemp (A questo punto il ciclo dovrebbe chiudere anche)

ho intenzione di giocare con questo, quando ho un po 'di tempo e codice postale vero e proprio, mi dispiace se i miei scarabocchi doesn' Non ha senso

1

Credo che l'intera stringa sia invertita e il fatto che le parole ebraiche siano visualizzate nell'ordine corretto è in realtà il risultato di un problema diverso. Quello che sospetto è che le parole ebraiche siano archiviate in un ordine non lessicale.

In teoria si dovrebbe essere in grado di risolvere il problema semplicemente invertendo la stringa e quindi imporre a SQL Server di visualizzare le parole arabe da sinistra a destra.Questo viene fatto aggiungendo un carattere speciale per la parte anteriore e posteriore della stringa come segue:

DECLARE @sourceString NVARCHAR(100) = N'123456 בדיקה esrever sti fI kcehC'; 

    DECLARE @reversedString NVARCHAR(4000) = nchar(8237) + REVERSE(@sourceString) + nchar(8236) 

    SELECT @reversedString; 
0

È possibile utilizzare la funzione ASCII in SQL Server per ottenere il valore ASCII di caratteri nel campo di testo nel DB. Una volta ottenuto il valore di ascii, confrontalo con il range valido di caratteri e numeri visibili in inglese. Qualsiasi altra cosa può essere considerata come carattere ebraico.

Esiste anche la funzione REVERSE automaticamente in SQL Server per invertire la stringa come richiesto.

Il seguente collegamento presenta un codice di esempio.

http://www.sqlservercurry.com/2009/09/how-to-find-ascii-value-of-each.html

Problemi correlati