группа первым символом

Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.

Вы вправе использовать [DateTime] объекты при сравнении, но учтите, что эти объекты всегда содержат время.

Удобно, что вы можете использовать свойство .Date такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.

Вытащив мое измененное утверждение if снизу, вы можете сделать это так:

if ($dirDate.Date -lt $lastSaturday.Date -and $dirDate.Date -ge $weekAgoSunday.Date) {
    # do stuff
}

Теперь вы сравниваете только даты и игнорируете время!


[1123 На основании того, что вы показываете, похоже, что оператор if работает, как ожидалось. Подводя итог, вы говорите, что:

$dateTimeObjectFromRegex это Saturday, January 12, 2019 12:00:00 PM

$lastSaturday это Saturday, January 12, 2019 3:59:04 PM

$weekAgoSunday это Sunday, January 6, 2019 12:00:00 AM

[ 1127] Условным условием является:

if(([datetime]$dateTimeObjectFromRegex -lt [datetime]$lastSaturday) 
-and ([datetime]$dateTimeObjectFromRegex -ge [datetime]$weekAgoSunday))

Поэтому в псевдокоде это:

if (
    ("January 12, 2019 12:00:00 PM" is earlier than "January 12, 2019 3:59:04 PM") # true
    and
    ("January 12, 2019 12:00:00 PM" is later or the same as "January 6, 2019 12:00:00 AM") # true
) # true

Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.

$lastSaturday = GetLastSaturdayDate
$lastSaturday = [datetime]$lastSaturday
$weekAgoSunday = GetWeekAgoSundayDate
$weekAgoSunday = [datetime]$weekAgoSunday

Ваши функции уже возвращают [DateTime] объекты, поэтому нет необходимости в этих приведениях.


      $temp = 

Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.

Вы вправе использовать [DateTime] объекты при сравнении, но учтите, что эти объекты всегда содержат время.

Удобно, что вы можете использовать свойство .Date такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.

Вытащив мое измененное утверждение if снизу, вы можете сделать это так:

[110]

Теперь вы сравниваете только даты и игнорируете время!


[1123 На основании того, что вы показываете, похоже, что оператор if работает, как ожидалось. Подводя итог, вы говорите, что:

$dateTimeObjectFromRegex это Saturday, January 12, 2019 12:00:00 PM

$lastSaturday это Saturday, January 12, 2019 3:59:04 PM

$weekAgoSunday это Sunday, January 6, 2019 12:00:00 AM

[ 1127] Условным условием является:

[111]

Поэтому в псевдокоде это:

[112]

Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.

[113]

Ваши функции уже возвращают [DateTime] объекты, поэтому нет необходимости в этих приведениях.


[114]

Это довольно сложно, вы можете упростить его до чего-то вроде этого:

if (

Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.

Вы вправе использовать [DateTime] объекты при сравнении, но учтите, что эти объекты всегда содержат время.

Удобно, что вы можете использовать свойство .Date такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.

Вытащив мое измененное утверждение if снизу, вы можете сделать это так:

[110]

Теперь вы сравниваете только даты и игнорируете время!


[1123 На основании того, что вы показываете, похоже, что оператор if работает, как ожидалось. Подводя итог, вы говорите, что:

$dateTimeObjectFromRegex это Saturday, January 12, 2019 12:00:00 PM

$lastSaturday это Saturday, January 12, 2019 3:59:04 PM

$weekAgoSunday это Sunday, January 6, 2019 12:00:00 AM

[ 1127] Условным условием является:

[111]

Поэтому в псевдокоде это:

[112]

Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.

[113]

Ваши функции уже возвращают [DateTime] объекты, поэтому нет необходимости в этих приведениях.


[114]

Это довольно сложно, вы можете упростить его до чего-то вроде этого:

[115]

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

.Name -match '(\d{4}-\d{2}-\d{2})

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

) { # in here, you know the match was successful $dirDate = Get-Date $Matches[1] # double check this, might need .Groups or something if ($dirDate -lt $lastSaturday -and $dirDate -ge $weekAgoSunday) { # do stuff } }

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

$regex = [regex]::Matches($temp,'([0-9]+)-([0-9]+)-([0-9]+)') if($regex.length -gt 0) #it matched { $year = $regex[0].Groups[1].Value $month = $regex[0].Groups[2].Value $day = $regex[0].Groups[3].Value write-output $year write-output $month write-output $day write-output "*************" $dirDate = $regex[0].Groups[0].Value + " 12:00:00 PM" write-output $dirDate

Это довольно сложно, вы можете упростить его до чего-то вроде этого:

if (

Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.

Вы вправе использовать [DateTime] объекты при сравнении, но учтите, что эти объекты всегда содержат время.

Удобно, что вы можете использовать свойство .Date такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.

Вытащив мое измененное утверждение if снизу, вы можете сделать это так:

[110]

Теперь вы сравниваете только даты и игнорируете время!


[1123 На основании того, что вы показываете, похоже, что оператор if работает, как ожидалось. Подводя итог, вы говорите, что:

$dateTimeObjectFromRegex это Saturday, January 12, 2019 12:00:00 PM

$lastSaturday это Saturday, January 12, 2019 3:59:04 PM

$weekAgoSunday это Sunday, January 6, 2019 12:00:00 AM

[ 1127] Условным условием является:

[111]

Поэтому в псевдокоде это:

[112]

Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.

[113]

Ваши функции уже возвращают [DateTime] объекты, поэтому нет необходимости в этих приведениях.


[114]

Это довольно сложно, вы можете упростить его до чего-то вроде этого:

[115]

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

.Name -match '(\d{4}-\d{2}-\d{2})

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

) { # in here, you know the match was successful $dirDate = Get-Date $Matches[1] # double check this, might need .Groups or something if ($dirDate -lt $lastSaturday -and $dirDate -ge $weekAgoSunday) { # do stuff } }

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

33
задан dreftymac 20 July 2018 в 17:03
поделиться

5 ответов

Ваш запрос является неправильным, так как необходимо было бы выполнить некоторую функцию агрегирования на EMPLOYEE_ID, если Вы хотите, чтобы это работало.

Как:

select substr(first_name,1,1) as alpha, count(employee_id)
  from employees
 group by substr(first_name,1,1)

, Что точно Вы пытаетесь выполнить?

57
ответ дан 27 November 2019 в 18:02
поделиться

Необходимо будет сгруппироваться всем, что не является агрегатной функцией, таким образом, у Вас не может быть employee_id в ИЗБРАННОЙ проекции. Также необходимо сгруппироваться просто первым символом first_name. Что-то вроде этого должно работать:

SELECT  SUBSTR(first_name, 1, 1) AS alpha, COUNT(*) AS employee_count
FROM    employees
GROUP   BY SUBSTR(first_name, 1, 1);

, Который сгруппировался бы первой буквой имени и показал бы численность персонала, которые попадают в ту группу.

8
ответ дан 27 November 2019 в 18:02
поделиться

Это почти кажется на желание 26 записей, возвращенных с A, B, C как первый столбец и затем второй столбец, содержащий все идентификаторы сотрудника в разграниченном списке. Раз так посмотрите вопрос 468990, и/или это Просит, чтобы Tom связался . Что-то как (непротестированный)

SELECT SUBSTR(first_name,1,1), TO_STRING( CAST( COLLECT( employee_id ) AS ntt_varchar2 ) ) AS empIDs
FROM   employees
GROUP  BY
SUBSTR(first_name,1,1);
2
ответ дан 27 November 2019 в 18:02
поделиться

То, когда Вы группируетесь, все столбцы, которые появляются в Вашем списке выборки, которые не агрегированы, должны также появиться в "группе" пунктом (employee_id не делает).

Вы могли разъяснить то, что это - Вы, пытаются сделать?

1
ответ дан 27 November 2019 в 18:02
поделиться

Я думаю, что знаю то, что Вы пытаетесь сделать...

необходимо составить маленькую таблицу ссылок со столбцом 'буква' (буква, sort_order)

Вы должны свой запрос как

выбор l.letter, количество (e.id) как сотрудники от буквы L, оставленной сотрудника внешнего объединения e на l.letter = substr (e.first_name, 1,1)

, другой отправленный ответ даст Вам неожиданные результаты, когда не будет никаких сотрудников с определенной буквой на их имя...

0
ответ дан 27 November 2019 в 18:02
поделиться
Другие вопросы по тегам:

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