Du bist nicht angemeldet.

1

Donnerstag, 12. Juli 2012, 15:26

convert pk_data aus log-Tabelle into int

Hi,
nichts ist einfach :(

In der log-Tabelle gibt es ein Feld pk_data.
Da steht der PrimaryKey des Satzes drin, der geändert worden ist. So weit so gut.

Das Feld pk_data hat das Format: nvarchar(190)

lustigerweise die Inhalte in folgender "formatierter" Form:

5.33633; ==> gemeint ist: 533633
3.448; ==> gemeint ist: 3448

Ich möchte mir mit einem SQL Statemanet mit JOIN den passenden Datensatz dazu holen:

select
log.*, d_pro.* from log
left join d_pro on (d_pro.lngid=log.pk_data)
where d_pro.PROSPECT_I is null and log.table_name='d_pro'


Natürlich klappt das mit dem Inhalt von pk_data nicht.

Hat jemand einen Plan wie ich aus: "5.33633;" dies machen kann "533633" ??
Mit FoxPro wär's einfach (weil ich es weiß "chrtran(Feld,".;","")" ), aber wie mit SQL?


Oder kann ich Servoy überreden den PK "ordentlich" abzulegen ????

Gruß Harro

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Harro« (12. Juli 2012, 15:40)


2

Donnerstag, 12. Juli 2012, 15:49

Hallo Harro

da verstehst du etwas falsch. Die Ziffer vor dem punkt ist die anzahl zeichen.
das wurde so eingebaut damit man wenn man nach 448 sucht, nicht auch 4481.. kommt.

5.33633; ==> ist 33633
3.448; ==> ist 448

Hoffe das hilft dir weiter
Jonpaul Feuerstein
Mirus Software AG

3

Donnerstag, 12. Juli 2012, 16:03

Hallo Jonpaul,
das wird ja immer schlimmer :(

Hatte grade schon eine Routine gefunden, die mir aus den pk_data eine Zahl macht.
Wunderte mich grade, daß ich nichts finde. Kein Wunder.

Jetzt muß ich die Routine so umbasten, daß sie mir nur die wirkliche Zahl herausholt. Na toll :)

Oder hat jemand schon so eine UDF?

Gruß Harro

4

Donnerstag, 12. Juli 2012, 16:19

Hab erst mal keine Idee.

Wie überrede ich eine UDF das zu tun?
In FoxPro würde ich es so machen:

feld = "5.12345;"
abStelle =
at(".",feld)
bisStelle =
at(";",feld)
inDerLänge= bisStelle - abStelle -1
?
substr(feld,abStelle+1 ,inDerLänge)


:( weiß jemand was? Ist bestimmt ganz einfach (wenn man's weiß)

Gruß Harro

Hab was gebastelt, ist noch nicht perfekt:

Create
FUNCTION[dbo].[UDF_intLngID]
(
@stringVARCHAR(8000)
)
RETURNSVARCHAR(8000)
AS
BEGIN
declare@Lngeinteger
declare@FldNeuinteger
SET@Lnge=SUBSTRING(@string,1 , 1 )
set@FldNeu=SUBSTRING(@string,3 ,@Lnge)
SET@string=@FldNeu
RETURN@string
END

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Harro« (12. Juli 2012, 16:45)


5

Freitag, 13. Juli 2012, 09:08

Einmal drüber schlafen hilft. (Kann garnicht so viel schlafen, wie ich offene Punkte habe.)

Hier habe ich mal eine UDF gebastelt, mit der man PrimaryKey "entschlüsselt".
Falls es jemand mal braucht:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE FUNCTION [dbo].[UDF_intLngID] 
(@string VARCHAR(8000) 
) 
RETURNS VARCHAR(8000)AS 

BEGIN
declare @LgString integer 
declare @LgSearch integer
declare @I integer 
declare @DerPunkt integer
set @i = 0 
set @LgSearch = 0
set @LgString = LEN(ISNULL(@string,'')) 
while @I <= @LgString 
begin 
if SUBSTRING ( @string ,@I , 1) = '.' 
begin 
set @DerPunkt = @I
set @LgSearch = SUBSTRING ( @string ,1, @I-1) 
break 
end 
set @i = @i + 1
end 
RETURN SUBSTRING ( @string ,@DerPunkt+1, @LgSearch) 
END

Social Bookmarks

Thema bewerten