Obliczanie wyrażeń w SQL

0

Muszę zrobić jedną rzecz ale nie wiem jak się do tego zabrać.
Chciałbym obliczyć w SQL pewne wyrażenie np.

z1 * (z2 + z3)

z tym, że to wyrażenie jest zapisane w bazie danych jako ciąg znaków.
Trzeba pod zmienne z1, z2, z3 podstawić odpowiednie wartości i dokonać obliczeń.
Czy coś takiego jest wykonalne?
Widziałem taki parser ale napisany on był w języku C a ja muszę to zrobić w SQL.

0

Jaki sql?

0

SQLServer2000

0

Jest wykonalne. Powiedz tylko jak zmienne maja trafić do SQL.
Podane przez kod programu?
Czy może zapisane gdzieś w tabel?

0

Rozwiazalem to tak ze lista rekordow jest ladowana do aplikacji (napisanej w C++) i tam to dopiero jest obliczane.
Algorytm obliczania jest zapisany jako varchar w jednej kolumnie (np. (z1 + z1) / 100) ), a wartosci zmiennych sa w innych kolumnach.

A jak to zrobic w samym SQL to nie mam pojecia.

0
MiL napisał(a)

Rozwiazalem to tak ze lista rekordow jest ladowana do aplikacji (napisanej w C++) i tam to dopiero jest obliczane.
Algorytm obliczania jest zapisany jako varchar w jednej kolumnie (np. (z1 + z1) / 100) ), a wartosci zmiennych sa w innych kolumnach.

A jak to zrobic w samym SQL to nie mam pojecia.

Zakładam, że nazwy zmiennych są identyczne jak nazwy kolumn więc naprzykład, masz
tabele "obliczenia":

z1|z2|formula| wynik
1|2|z1*z2|null

więc piszesz procedure:

CREATE PROCEDURE dbo.licz
AS
   declare @formula nvarchar(500)
   declare @exec  nvarchar(1100)

   declare qcursor cursor for
		select formula
		from obliczenia
		where not formula is null
		group by formula
	
	open qcursor
	fetch next from qcursor into @formula
	while (@@FETCH_STATUS <> -1)
	begin
		set @exec = 'update obliczenia set ilosc =  ' + @formula + ' where  formula = ''' + @formula + ''''
		exec (@exec)
		fetch next from qcursor into @formula
	end	
	close qcursor
	deallocate qcursor

GO

a później tylko wywołujesz
Ta procedura pobiera formuly z tabeli obliczeniowej, później generuje zapytanie sql któr oblicza daną wartość, celowo grupuje aby nie robić po kilka razy zapytań dla tych samych formul.
Warunek jaki musisz spełnić to formula musi mieć składnie SQL-a, jesli nie to musisz napisać funkcje która sparsuje daną fraze...

0

Pomysl na te obliczenia jest fajny, ale zeby go zastosowac w moim przypadku, trzeba by bylo jeszcze troche pokombinowac. Wartosci ktore maja byc brane do obliczen nie sa jawnie podane, ale wynikaja z pewnych warunkow. W dodatku skladnia wyrazenia pochodzi z jezyka C (czyli moze byc np. !z1).
Mozna by tu zastosowac np tablice tymczasowa, policzyc zmienne i dopiero obliczac ale mi zalezalo tez na czasie wiec niech juz zostanie tak jak jest :)
W kazdym razie dzieki za pomoc.

0

Ja to w swoich rozwiązaniach, mam stworzy, język dla klienta którego musi się nauczyć, i póxniej formułe wstawiam za pomocą funkcji sql-owej, odpowiednie replace żeby składnia była poprawna, i operuje na tabelach tymczasowych, bo inaczej <ort>jakby </ort>dwie osoby robiły to samo to by dane się napisywały...

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