简体   繁体   中英

What's wrong with my SQL query?

SELECT id, 
       sageaccount, 
       sageid, 
       totalwithoutvat, 
       vat, 
       total, 
       invoicedate, 
       alloweditting, 
       finished, 
       CASE WHEN isposted = 1 THEN 'Posted on ' + posteddate 
           ELSE 'Not Posted' 
       END AS Posted 
FROM Invoices 
WHERE (sageaccount = @sageaccount)

If I take the '+ posteddate' away, it works perfectly. But with the + posteddate, I get this error:

Conversion failed when converting datetime from character string.

The posteddate field is usually null, unless posted is true, and the format of posteddate is definetly datetime.

Any ideas?

You need to convert posteddate to a varchar value in order to concatenate it with another varchar value ('Posted on ')

SELECT  id, 
        sageaccount, 
        sageid, 
        totalwithoutvat, 
        vat, total, 
        invoicedate, 
        alloweditting, 
        finished, 
        CASE WHEN isposted = 1 THEN 'Posted on ' + CONVERT(varchar(10), posteddate, 20) ELSE 'Not Posted' END AS Posted 
FROM Invoices 
WHERE (sageaccount = @sageaccount)

I suspect it is complaining about you trying to add a date to a string. Depending on what platform you are using:

1) Ensure that string concatenation can be achieved with '+'. You might have to call a function instead such as CONCAT()

2) Cast the Date as a string.

You are adding two values with different types, so the database tries to convert one of them to the other type.

Convert the datetime value to a string before concatenating:

SELECT
  id, sageaccount, sageid, totalwithoutvat, vat, total,
  invoicedate, alloweditting, finished,
  CASE
    WHEN isposted = 1 THEN 'Posted on ' + convert(varchar, posteddate)
    ELSE 'Not Posted'
  END AS Posted
FROM Invoices
WHERE sageaccount = @sageaccount

the PostedDate must be treated as a string first before you can join it to another string. You can do a conversion this way

CONVERT(varchar(10), posteddate, 101)

Syntax for CONVERT: CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

style is optional

here are some samples of styles:

101 = mm/dd/yyyy ex. 01/02/1999

102 = yy.mm.dd ex. 99.02.01

103 = dd/mm/yyyy ex. 02/01/1999

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM