Porównanie wielkości jeśli zmienia jest int

0

Witam mam następujące problem ma takie przykładowe dane :

Z104.001.175.018
Z104.001.175.023
Z104.001.175.023_Z
Z104.141.190.023
Z104.198.190.023
Z104.201.140.060
ZW143 SP X HP.060P
ZW143 SP X HP.065
ZW143 SP X HP.065P
ZW143 SP X HP.060P

Następnie chce wszystkie rekordy które ostania liczba jest większa niż np 24
np kod Z104.001.175.023 wycinamy 023 i patrzymy czy jest liczbą i czy jest większy niż 23

Moje próby pytań wyglądały mnie więcej tak

Select  name FROM table WHERE SUBSTRING(name 13,3)>24 

Tylko nie zawsze ta wycięta wartość bd liczba i wyskakuje błąd
Próbowałem z ISNUMERIC ale to chyba ślepa uliczka .

1

Sprawdź tak:

SELECT NAME
FROM   table
WHERE  CASE
         WHEN Isnumeric(kolumna) = 1 THEN Cast(kolumna AS INT)
         ELSE NULL
       END > 24  

Edit: bo źle mi się sformatował kod :D

1

Która wersja ms sqla?

1

MAsz takie wartości:

  1. Z104.001.175.023_Z
  2. Z104.001.175.023
  3. ZW143 SP X HP.060P

I teraz 1,3 odrzucasz bo nie ma liczby na ostatnich znakach czy szukasz bierzesz pod uwagę odcinając końcówki '_z' i P ?

1

To jeszcze raz sprawdź to , miałeś błąd w substring (powinno byc 14,3) ... a ja w ogóle to pominąłem :P

SELECT NAME
FROM   table
WHERE  CASE
         WHEN Isnumeric(Substring(NAME, 14, 3)) = 1 THEN Cast(
         Substring(NAME, 14, 3) AS INT)
         ELSE NULL
       END > 24  
1

Skoro liczba ma być od 14 do 17, to substring powinien mieć taki zapis: SUBSTRING(name 14,4), bo patrzymy na znaki 14,15,16,17, a to są 4 znaki

1

Sprawdź sobie ten kod:

SELECT SUBSTRING('ZW143 SP X HP.060P',14,3)

I juz wiadomo o co chodzi ... masz różne długości znaków ... musisz podejść do tematu wycięcie fragmentu textu od ostetniej kropki...

1

@BlackBad: sprawdzenie IsNumeric nie determinuje tego że od razu można to przekonwertować na liczbę, w załączonym przykładzie:

Wartość substringa z ZW143 SP X HP.060P = ".06", is numeric = 1 => bład konwersji do int

@Paweł Ada ja bym warunek zbudował tak:

  case when substring(col,14,3) like '[0-9][0-9][0-9]' then
    substring(col,14,3)
  else 
      null end > 24

http://sqlfiddle.com/#!18/c18f4/23

0

Działa :) dziękuje @Panczo i @BlackBad za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1