AMcoder - javascript, python, java, html, php, sql

sybase - պարզ միացում

Ես փորձում եմ ստեղծել կոմունալ պահեստավորված proc, որը կարող է վերցնել պարամետր և հարցնել հարմար աղյուսակ՝ որոշ արագ տեղեկություններ ստանալու համար: Դրա համար ես պետք է ավելացնեմ «%» նիշը պարամետրի անցնելուց առաջ և հետո, որպեսզի օգտագործեմ այն ​​like-ով հարցումում, ինչպես ցույց է տրված ստորև:

Աշխատանքային կոդը - եթե կոշտ կոդավորված է

select some_field from TABLE where nm_field like ('%'+'abc'+'%')

Բայց երբ փորձում եմ նույնը օգտագործել փոփոխականի հետ, ես ավելի քիչ արդյունքներ եմ ստանում՝ համեմատած վերը նշված հարցման հետ

declare @nm char(100)
select @nm = 'abc'
select some_field from TABLE where nm_field like ('%'+@abc+'%')

Որոշ հետաքննության, փորձարկման և սխալի դեպքում հետևյալ ընտրությունը ցույց է տալիս, որ «%» ավելացվում է միայն պարամետրից առաջ, և ոչ թե երկու կողմից:

declare @name char(20), @other char(20)
select @name = 'abc'
select @other = ('%' + @name + '%')
select @other

Սպասվող արդյունքը

%abc%

Բայց իրական արդյունքը

%abc

Ես օգտագործում եմ Sybase ASE-12.5.4-ը

Խնդրում եմ, կարո՞ղ եք օգնել ինձ, թե ինչն է սխալ այստեղ:


Պատասխանները:


1

Փորձեք փոխել @nm տեսակը varchar-ի, ինչպես ստորև

declare @nm varchar(100) 
select @nm = 'abc'
select some_field from TABLE where nm_field like ('%'+@abc+'%')

Char տիպն ունի հաստատուն չափ, իսկ դբ-ն լրացնում է բացը՝ օգտագործելով բացատները

declare @nm char(100) 
select @nm = 'abc' 

ստորև ընտրել

select @nm

կվերադարձնի abc և 97 բացատ:

26.08.2013
  • @mtk Ես իմ պատասխանին բացատրություն ավելացրեցի. Ինչպես ասացիք, կարող եք նաև օգտագործել կտրման գործառույթները: Ինձ համար ավելի լավ միջոց է օգտագործել varchar տիպը 27.08.2013

  • 2

    Կարծես գտել եմ ճիշտ պատասխանը։ Հենց char-ի օգտագործումն է հանգեցնում այս վարքագծին, քանի որ այն ունի ֆիքսված չափս: varchar-ն այդպիսին չէ, և հետևաբար, միացումն աշխատում է այնպես, ինչպես սպասվում էր:

    char-ով մենք պետք է ավելացնենք trim-ը, որպեսզի միացումը տեղի ունենա սպասվածի պես

    declare @str char(100)
    select @str ='abc'
    select ('%'+ltrim(rtrim(@str))+'%')
    

    Արդյունք

    %abc%
    
    27.08.2013
    Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..