Добавить номер строки после разделения поля строки

  1. getDate () возвращает день месяца, в вашем случае: 9 и 12.
  2. Вы должны явно определять объекты даты через следующее. Месяцы основаны на 0, поэтому 0 = январь, 1 = февраль ... var date2 = new Date (2009, 1, 9);
  3. Это числа, а не строка. Если вы хотите использовать строку для даты, то вам нужен именно этот формат, ничего необязательного: var newDate = new Date («день месяца, год: минуты: секунды»); var date2 = new Date («февраль 9, 2009 00:00:00»);

[Изменить] Полное решение, если даты указаны в формате mm / dd / yyyy, а разница должно быть в днях:

<script type="text/javascript">
    function daysFromString(dateString)
    {
        // split strings at / and return array
        var splittedString = dateString.split("/");
        // make a new date. Caveat: Months are 0-based in JS
        var newDate = new Date(parseInt(splittedString[2], 10), parseInt(splittedString[0], 10)-1, parseInt(splittedString[1], 10));
        // returns days since jan 1 1970
        return Math.round(newDate.getTime() / (24*3600*1000));
    }

    var dateString2 = "02/09/2009";
    var dateString1= "03/12/2009";
    var dateDays1 = daysFromString(dateString1);
    var dateDays2 = daysFromString(dateString2);
    var diff = dateDays1 - dateDays2;
    alert (diff);
</script>
1
задан hemoali 13 July 2018 в 09:28
поделиться

3 ответа

Если версией вашей БД является 8.0 + , то предложение with recursive cte as может использоваться как в следующем операторе select (после того, как были предоставлены необходимые DML, такие как create table и insert ):

mysql> create table tab( ID int, suggestions varchar(25));
mysql> insert into tab values(1,'A,B,C');
mysql> insert into tab values(2,'D,E,F,G,H');
mysql> select q2.*,
              row_number() 
              over 
             (partition by q2.id order by q2.suggestion) as number 
  from 
(       
select distinct
       id, 
       substring_index(
        substring_index(suggestions, ',', q1.nr), 
        ',', 
        -1
       ) as suggestion
    from tab
    cross join
    (with recursive cte as
     (
      select 1 as nr
      union all
      select 1+nr from cte where nr<10
      )
     select * from cte) q1
) q2;

+------+------------+--------+
| id   | suggestion | number |
+------+------------+--------+
|    1 | A          |      1 |
|    1 | B          |      2 |
|    1 | C          |      3 |
|    2 | D          |      1 |
|    2 | E          |      2 |
|    2 | F          |      3 |
|    2 | G          |      4 |
|    2 | H          |      5 |
+------+------------+--------+
1
ответ дан Barbaros Özhan 17 August 2018 в 13:16
поделиться

Я бы предложил серию подзапросов:

select id, substring_index(suggestions, ',', 1) as suggestion, 1
from example
where suggestions is not null
union all
select id, substring_index(substring_index(suggestions, ',', 2), ',', -1) as suggestion, 2
from example
where suggestions like '%,%'
union all
select id, substring_index(substring_index(suggestions, ',', 3), ',', -1) as suggestion, 3
from example
where suggestions like '%,%,%'
union all
select id, substring_index(substring_index(suggestions, ',', 4), ',', -1) as suggestion, 4
from example
where suggestions like '%,%,%,%'
union all
select id, substring_index(substring_index(suggestions, ',', 5), ',', -1) as suggestion, 5
from example
where suggestions like '%,%,%,%,%';

Это можно легко расширить, если у вас более 5 опций на один идентификатор.

0
ответ дан Gordon Linoff 17 August 2018 в 13:16
поделиться
  • 1
    У меня есть огромное и переменное количество предложений на один идентификатор, используя этот способ, это будет очень длинный запрос! – hemoali 13 July 2018 в 11:05
  • 2
    @hemoali. , , Вам нужно всего лишь количество подзапросов для максимального количества предложений на один идентификатор. – Gordon Linoff 13 July 2018 в 12:20

Найти здесь . Решена такая же проблема.

https://gist.github.com/avoidwork/3749973
0
ответ дан Zaynul Abadin Tuhin 17 August 2018 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: