2015-11-07 5 views
0

Я новичок в visual foxpro. Я пытаюсь написать sql-инструкции.Visual Foxpro - Определенная дата вычитания двух столбцов числовой даты и результата сравнения

Существует два столбца дат, тип данных - числовой.

Столбец Дата находится в формате YYYYMMDD. Дата столбца B находится в формате YYYYMM. DD недоступен, поэтому я просто сравниваю YYYYMM.

Мне нужно вычесть разницу между конкретной датой, например. 31 августа 2015 года и даты в столбцах A и B. Как только у меня есть разница, мне нужно сравнить и увидеть, больше ли разница в столбце B, чем в колонке A.

То, что я думал, использует substr и разделяет датируется ГГГГ и ММ. Затем вычитайте его с определенной даты, а затем сравните часть YYYY, чтобы увидеть, больше ли столбец B столбца A.

+0

Если у вас действительно есть выбор, я могу предложить вам держаться подальше от Visual FoxPro для любой новой разработки ... Это уже не поддерживаемый продукт: https://support.microsoft.com/en-us/lifecycle?p1=7992 – sstan

+1

В чем разница между '20150831' и' 201508 '? –

ответ

1

Ваше описание выглядит так, как если бы columnA/100 предоставил сопоставимый формат.

Так что если у вас есть тестовые данные, как эти

CREATE CURSOR test (columnA Num(8), columnB Num(6)) 
INSERT INTO test VALUES (20150802, 201508) 
INSERT INTO test VALUES (20150712, 201506) 

... вы можете получить все строки, в которых colmumnB равна конвертированы (Columna):

SELECT * FROM test WHERE INT(columnA/100) = columnB 

... или получить разница между а и в для всех строк:

SELECT INT(columnA/100) - columnB FROM test 

Или, если у вас есть параметр дата типа, вы можете, например, получить все строки где columnB будет соответствовать параметру:

d = DATE(2015,8,31) 
SELECT * FROM test WHERE columnB = YEAR(d) * 100 + MONTH(d) 

Если вы хотите сделать что-то другое, я бы предложил, чтобы изменить вопрос и добавить больше деталей