Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
Доброго дня. Помогите пожалуйста советом. Как преобразовать дату в формат "03-Mar-2018"?
У меня есть запрос, который объединяет кучу таблиц, но у всех разные форматы дат, а конечная программа, которая обрабатывает мой запрос воспринимает именно вот тот дебильный формат, который я описала выше.
В самой программе я использовала команду
select sampleid, acqdate(strcat(DAY(DATEVALUE([loaddate]) from CORP

но в этом случае штука не срабатывает и SQL ругается. Точнее SQL-менеджемент не понимает, а программа ругается.
Самое интересное что если я жестко прописываю даты в скрипте - все работает идеально, но как только используются эти даты в фильтре, чтобы пользователь мог их менять - ничего не показывает.
Есть ли команда которая позволит трансформировать дату любого формата в вид "03-Mar-2018"?

На всякий случай скрипт ниже
+
SELECT CASE ROW_NUMBER() OVER(PARTITION BY pp.PROJECTCODE ORDER BY a.holeid)
           WHEN 1
           THEN pp.PROJECTCODE
       END AS x_project,
       CASE ROW_NUMBER() OVER(PARTITION BY pp.DESCRIPTION ORDER BY a.holeid)
           WHEN 1
           THEN pp.DESCRIPTION
       END AS x_project_desc,
       --pp.PROJECTCODE,pp.DESCRIPTION,
       a.HOLEID, 
       a.DrillLenght, 
       b.SendSample, 
       c.assay, 
       TakenSample, 
       [Depth_drill], 
       totalcut.Totalcutting, 
       geo2.toTOTAL2
FROM PROJECT pp
     LEFT JOIN
(
    SELECT dd.PROJECTCODE AS x_project, 
           dd.HOLEID, 
           SUM(CAST((CASE
                         WHEN name = 'totaldrilldepth'
                         THEN value
                     END) AS FLOAT)) AS DrillLenght
    FROM drillingdetail dd
    WHERE CAST([DRILLINGDATE] AS DATE) BETWEEN '20-jul-2018' AND '06-aug-2018'
    GROUP BY PROJECTCODE, 
             HOLEID
) a ON pp.PROJECTCODE = a.x_project
     LEFT JOIN
(
    SELECT s.PROJECTCODE AS x_project, 
           s.HOLEID, 
           COUNT(sd.sampleid) AS SendSample
    FROM SAMPLEDESPATCH sd
         LEFT JOIN DESPATCHSEND ds ON sd.DESPATCHNO = ds.DESPATCHNO
         LEFT JOIN sample s ON s.SAMPLEID = sd.SAMPLEID
    WHERE CAST([senddate] AS DATE) BETWEEN '01-aug-2018' AND '06-aug-2018'
    GROUP BY PROJECTCODE, 
             HOLEID
) b ON pp.PROJECTCODE = b.x_project
       AND a.HOLEID = b.HOLEID
     LEFT JOIN
(
    SELECT projectcode AS x_project, 
           holeid, 
           COUNT(sss) assay
    FROM
    (
        SELECT DISTINCT 
               s.sampleid AS sss, 
               PROJECTCODE, 
               HOLEID
        FROM cORPSAMPLEASSAY c
             LEFT JOIN sample s ON s.SAMPLEID = c.SAMPLEID
        WHERE CAST([LOADDATE] AS DATE) BETWEEN '01-aug-2018' AND '06-aug-2018'
    ) abc
    GROUP BY abc.PROJECTCODE, 
             abc.HOLEID
) c ON pp.PROJECTCODE = b.x_project
       AND b.HOLEID = c.HOLEID
     LEFT JOIN
(
    SELECT ss.PROJECTCODE AS x_project, 
           holeid, 
           COUNT(ts.sampleid) AS TakenSample
    FROM SAMPLEDETAILS ts
         LEFT JOIN sample ss ON ss.SAMPLEID = ts.SAMPLEID
    WHERE CAST((CASE
                    WHEN name = 'SampDateTaken'
                    THEN value
                END) AS DATE) BETWEEN '01-aug-2018' AND '06-aug-2018'
    GROUP BY ss.PROJECTCODE, 
             ss.HOLEID
) t ON pp.PROJECTCODE = t.x_project
       AND t.HOLEID = a.HOLEID
     LEFT JOIN
(
    SELECT projectcode AS x_project, 
           holeid, 
           SUM([Depth_dh]) AS [Depth_drill]
    FROM
    (
        SELECT sample.projectcode, 
               sample.holeid, 
               ROUND(MAX(sampto) - MIN(SAMPFROM), 2) AS [Depth_dh]
        FROM sample
             LEFT JOIN SAMPLEDETAILS ON sample.SAMPLEID = SAMPLEDETAILS.sampleid
        WHERE CAST((CASE
                        WHEN name = 'SampDateTaken'
                        THEN value
                    END) AS DATE) BETWEEN '01-aug-2018' AND '06-aug-2018'
        GROUP BY sample.sampleid, 
                 projectcode, 
                 HOLEID
    ) zz
    GROUP BY projectcode, 
             HOLEID
) z ON pp.PROJECTCODE = z.x_project
       AND z.holeid = b.HOLEID
     LEFT JOIN
(
    SELECT DISTINCT 
           holeid, 
           projectcode
    FROM holelocation
) hl ON hl.HOLEID = a.HOLEID
     LEFT JOIN
(
    SELECT DISTINCT 
           holeid, 
           Totalcutting = MAX(geolto) - MIN(geolfrom)
    FROM GEODETAILS
    WHERE name = 'Cutting_Date'
          AND CAST(VALUE AS DATE) BETWEEN '01-aug-2018' AND '06-aug-2018'
    GROUP BY holeid
) totalcut ON totalcut.HOLEID = hl.HOLEID
     LEFT JOIN
(
    SELECT holeid hole1, 
           ROUND((MAX(geolto) - MIN(geolfrom)), 2) toDAY1
    FROM GEODETAILS
    WHERE value BETWEEN '01-aug-2018' AND '06-aug-2018'
          AND name NOT LIKE '%core%'
          AND name NOT LIKE '%rqd%'
          AND name NOT LIKE '%cut%'
    GROUP BY holeid, 
             value
) geo1 ON geo1.hole1 = hl.HOLEID
     LEFT JOIN
(
    SELECT holeid hole2, 
           MAX(geolto) toTOTAL2
    FROM GEODETAILS
    WHERE name = 'Lith_RockName'
    GROUP BY holeid
) geo2 ON geo2.hole2 = hl.HOLEID
WHERE a.x_project IS NOT NULL
      OR b.x_project IS NOT NULL
      OR c.x_project IS NOT NULL
      OR --x.x_project is not null or
      t.x_project IS NOT NULL
      OR z.x_project IS NOT NULL
ORDER BY pp.DESCRIPTION;





Кажется у меня кривые руки...
6 авг 18, 14:27    [21631512]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
katish444,

select convert(varchar,getdate(),106)

в таком формате не подойдёт?
06 Aug 2018
6 авг 18, 14:31    [21631523]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
komrad
Member

Откуда:
Сообщений: 5245
Сергей Викт.
katish444,

select convert(varchar,getdate(),106)

в таком формате не подойдёт?
06 Aug 2018

ну, тогда уж так :
select replace(convert(varchar(20),getdate(),106),' ','-')
6 авг 18, 15:54    [21631708]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
komrad, спасибо большое! Сейчас попробую
7 авг 18, 08:11    [21632380]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
komrad, блин, в менеджементе все так классно сработало, а гребанная БД не понимает команду
replace
...
7 авг 18, 08:21    [21632384]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
katish444,
что значит "не понимает"?

Приведите код и текст ошибки
7 авг 18, 08:37    [21632395]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
Сергей Викт., это проблема программы БД в которой я работаю. Она не знает это слово, даже цветом не выделяет. Придется придумывать что-то другое...

К сообщению приложен файл. Размер - 14Kb
7 авг 18, 09:44    [21632479]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
komrad
Member

Откуда:
Сообщений: 5245
katish444,

а что за программа, где вы можете писать код, который она выборочно транслирует в сиквел?
7 авг 18, 11:23    [21632632]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
komrad,

мабуть, у нее Sybase?
синтаксис у них родственный, тока вместо replace там str_replace
7 авг 18, 11:54    [21632681]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
katish444,

в replace все буквы английские? Точно?
7 авг 18, 11:55    [21632682]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
Посетитель
komrad,

мабуть, у нее Sybase?
синтаксис у них родственный, тока вместо replace там str_replace


а не, судя по другим постам, это какая-то софтина acQuire, которая, вероятно, претендует на кросс-платформенность
В связи с чем, синтаксис может транслироваться в СУБД не напрямую, а преобразовываться в зависимости от СУБД.

Мельком нагуглить ничего конкретного не удалось, доки походу доступны только по подписке.
7 авг 18, 12:08    [21632700]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
komrad
Member

Откуда:
Сообщений: 5245
katish444
komrad, блин, в менеджементе все так классно сработало, а гребанная БД не понимает команду
replace
...


ну, хорошо, давайте попробуем left/right ;)

select left(convert(varchar(20),getdate(),106),2)+'-'
	+left(right(convert(varchar(20),getdate(),106),8),3)+'-'
	+right(convert(varchar(20),getdate(),106),4)
7 авг 18, 14:24    [21632945]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
komrad
Member

Откуда:
Сообщений: 5245
Посетитель
komrad,

мабуть, у нее Sybase?
синтаксис у них родственный, тока вместо replace там str_replace

ну, тогда бы "SQL-менеджемент" бы к нему не подключился
полагаю, что это так названа SQL Server Management Studio (SSMS)
7 авг 18, 14:34    [21632958]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
aleks222
Member

Откуда:
Сообщений: 985
komrad
katish444
komrad, блин, в менеджементе все так классно сработало, а гребанная БД не понимает команду
replace
...


ну, хорошо, давайте попробуем left/right ;)

select left(convert(varchar(20),getdate(),106),2)+'-'
	+left(right(convert(varchar(20),getdate(),106),8),3)+'-'
	+right(convert(varchar(20),getdate(),106),4)


Научи лучше, страдалицу вьюшки писать.
7 авг 18, 16:02    [21633088]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
komrad,
база данных acQuire-4, она на SQL, но он у нее какой-то урезанный, но при этом есть свои команды...
8 авг 18, 06:34    [21633705]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
komrad,
КЛАСС!!!!!
Спасибо большущее
8 авг 18, 06:34    [21633706]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
aleks222,
вьюшки это что?
8 авг 18, 06:34    [21633707]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
Посетитель,

да, вы совершенно правы. БД на SQL, но при этом у нее куча своих команд, например acqdate(), которые конечно SQLменеджемент не знает, и наоборот.
у них кроме рекламы больше ничего и нет, все за деньги...
https://www.acquire.com.au/
8 авг 18, 06:40    [21633708]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование даты.  [new]
katish444
Member

Откуда:
Сообщений: 261
РЕБЯТА! СПАСИБО ВСЕМ ОГРОМНОЕ!

получилось
8 авг 18, 06:41    [21633709]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить