Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


COALESCE och % wildcard

Postades av 2005-11-10 17:26:33 - Daniel Sivertsson, i forum databaser, Tråden har 9 Kommentarer och lästs av 1204 personer

Jag vill kunna använda % wildcard i kombination med COALESCE, men får det inte att fungera.

Följande resulterar i 0 träffar

declare @test as char(5)
set @test = '%@%'

select contactid from contact where mailadress LIKE COALESCE(@test, mailadress)


samma resultat om jag skriver på följande sätt:

declare @test as char(5)
set @test = '@'

select contactid from contact where mailadress LIKE COALESCE('%'+@test+'%', mailadress)


Följande fungerar dock:

declare @test as char(5)
set @test = '%@%'

select contactid from contact where mailadress LIKE @test


Är det helt enkelt så att % och COALESCE kombinationen inte fungerar i MS SQL 7.0 eller ska man skriva på nått annat sätt?


Svara

Sv: COALESCE och % wildcard

Postades av 2005-11-10 22:49:46 - Ola Lindfeldt

Jag undrar vad du vill uppnå med detta
COALESCE ('@', B) returnerar det första icke null uttrycket dvs här kommer det alltid returnera '@' så vad behöver du det till?

Men samtidigt tycke jag att det bör funka

En vild gissning: konvertera resultatet från COALESCE till varchar
CAST(COALESCE(@test, mailadress) AS varchar(100))

Testade på SQL2005 å där funkade det bra, så det kanske är nåt med SQL7 då.


Svara

Sv:COALESCE och % wildcard

Postades av 2005-11-11 10:26:23 - Håkan Borneland

Vad vill du göra/uppnå/ska hända?

//Håkan


Svara

Sv: COALESCE och % wildcard

Postades av 2005-11-11 11:24:47 - Daniel Sivertsson

Det jag vill uppnå är ett dynamiskt WHERE villkor där jag kan använda mig av % som wildcard
Jag har en stored procedure som ser ut på följande sett och i denna utformning fungerar den som tänkt:

CREATE PROCEDURE [GetRecepient] 
@Project as integer = null,
@Status as integer = null,
@WantsInspire as integer = null,
@Mailadress as char(5) = null
AS
if @Mailadress  is null
begin
	SELECT ContactID, Contact, Company, Town FROM Contact WHERE ProjectID = COALESCE(@Project, ProjectID) AND StatusID = COALESCE(@Status, StatusID) AND WantsInspire = COALESCE(@WantsInspire, WantsInspire)	
end
else
begin
	SELECT ContactID, Contact, Company, Town FROM Contact WHERE ProjectID = COALESCE(@Project, ProjectID) AND StatusID = COALESCE(@Status, StatusID) AND WantsInspire = COALESCE(@WantsInspire, WantsInspire) AND Mailadress LIKE @Mailadress
end


Det jag nu vill är att göra samma sak fast i en och samma SQL sats, typ så här:

CREATE PROCEDURE [GetRecepient] 
@Project as integer = null,
@Status as integer = null,
@WantsInspire as integer = null,
@Mailadress as char(5) = null
AS
SELECT ContactID, Contact, Company, Town FROM Contact WHERE ProjectID = COALESCE(@Project, ProjectID) AND StatusID = COALESCE(@Status, StatusID) AND WantsInspire = COALESCE(@WantsInspire, WantsInspire) AND Mailadress LIKE COALESCE(@Mailadress, Mailadress) 	


Alltså om @Mailadress = null så tar den med alla värden i kolumnen, men om @Mailadress != null så söker den på värdet i @Mailadress,
och här vill jag kunna använda mig av '%' vilket jag inte fått att fungera.

CAST(COALESCE(@test, mailadress) AS varchar(100)) fungerade inte, tyvärr.
Det kanske helt enkelt bara är en begränsing i 7:an...


Svara

Sv:COALESCE och % wildcard

Postades av 2005-11-11 13:20:34 - Håkan Borneland

Testa:

CREATE PROCEDURE [GetRecepient] 
@Project            as integer          = NULL,
@Status             as integer         = NULL,
@WantsInspire   as integer         = NULL,
@Mailadress       as varchar(50)   = NULL

AS

SET NOCOUNT ON

SET @Mailadress = '%' + @Mailadress + '%'

SELECT ContactID, Contact, Company, Town FROM Contact 
WHERE ProjectID = COALESCE(@Project, ProjectID) 
AND StatusID = COALESCE(@Status, StatusID) 
AND WantsInspire = COALESCE(@WantsInspire, WantsInspire) 
AND Mailadress LIKE COALESCE(@Mailadress, Mailadress) 


//Håkan


Svara

Sv: COALESCE och % wildcard

Postades av 2005-11-11 15:57:45 - Daniel Sivertsson

Gick inte heller :(

det fungerar om man anger en hel mailadress:
@Mailadress = 'testing@mailadress.com'

men @Mailadress = @ ger inga träffar...
Det är som om den bara ignorerar %-tecknen


Svara

Sv:COALESCE och % wildcard

Postades av 2005-11-11 17:03:31 - Ola Lindfeldt

Skumt.. har ingen aning faktiskt..
Men en alternativ lösning på samma princip är följande.

WHERE (StatusID = @Status OR @Status IS NULL)

dvs: om StatusID ej skickas med så är det null och då
vinner 'NULL IS NULL' och villkoret tas ej med i urvalet.


Svara

Sv:COALESCE och % wildcard

Postades av 2005-11-12 00:20:58 - Håkan Borneland

Hej Daniel!

Har provkört ovanstående som jag postade, det fungerar även med bara @.
Dock bara i QA.
Frågan är vad du får in för värden från din app.
Provade du att köra exakt det som jag skrev ovan, eller?

//Håkan


Svara

Sv:COALESCE och % wildcard

Postades av 2005-11-13 16:21:10 - Andreas Hillqvist

Detta är ett alternativ:

CREATE PROCEDURE [GetRecepient] 
@Project as integer = null,
@Status as integer = null,
@WantsInspire as integer = null,
@Mailadress as varchar(5) = null
AS
    SELECT ContactID, Contact, Company, Town
    FROM Contact
    WHERE (@Project IS NULL OR ProjectID = @Project) AND 
        (@Status IS NULL OR StatusID = @Status) AND 
        (@WantsInspire IS NULL OR WantsInspire = @WantsInspire) AND 
        (@Mailadress IS NULL OR Mailadress LIKE @Mailadress)


Skulle vara interesant att veta om någon känner till hur SQL servern optimerar vilkoren.
Om en parameter skulle vara null är ju detta konstant för alla rader. Skulle inte frågemotorn då kunna förenkla bort några av staserna?


Svara

Sv: COALESCE och % wildcard

Postades av 2005-11-14 09:08:30 - Daniel Sivertsson

Andreas: Den lösningen fungerade!

Håkan: Jag provade din lösning (Copy - Paste) och skickade bara in @, men fick det inte att fungera, tyvärr

Ola: Din lösning fungerade så länge man skickade in något, men @Mailadress = null resulterade i 0 träffar

Tack så mycket för all hjälp!

/Daniel


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 658
27 958
271 741
580
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies