rango que por otra mayor igual generar filtrar fechas fecha entre consulta comparar sql vba ms-access access-vba ms-access-2013

que - sql server comparar fechas mayor



¿Cómo puedo dividir un rango de años en años individuales en un campo dado? (4)

Agregue el código siguiente a un módulo en Visual Basic

Public Function CommaDates(Start_End) As String Dim strt As String Dim endd As String Dim x As Long strt = Left(Start_End, 4) endd = Right(Start_End, 4) CommaDates = strt For x = strt + 1 To endd CommaDates = CommaDates & "," & x Next x End Function

Llámalo en una consulta como NEW_DATE: CommaDates([OLD_DATE_FIELD_NAME])

Estaba trabajando en Access para hacer una consulta de algunas tablas y me di cuenta de que una columna de una tabla no cumple con un requisito específico.

Tengo un campo que consta de miles de registros y contiene "años" en el siguiente formato (un ejemplo): 1915-1918 .

Lo que quiero lograr es hacer que ese valor sea individual en los registros. Entonces el resultado final sería: 1915,1916,1917,1918 .

Básicamente, quiero convertir 1915-1918 a 1915,1916,1917,1918 .

Pensé que una concatenación simple sería suficiente, pero no podía entender cómo hacerlo para que pueda hacerlo para todos los miles de registros. Hice algunas investigaciones y llegué a la conclusión de que una función definida por el usuario podría ser el camino a seguir. ¿Cómo voy a hacer esto?


Cuando el valor de su campo consta de 4 dígitos seguidos de un guion seguido de 4 dígitos más, esta función devuelve una lista de años separados por comas.

En cualquier otro caso (nulo, un año único como "1915" en lugar de un año o cualquier otra cosa), la función devuelve el valor de inicio.

Public Function YearList(ByVal pInput As Variant) As Variant Dim astrPieces() As String Dim i As Long Dim lngFirst As Long Dim lngLast As Long Dim varReturn As Variant If pInput Like "####-####" Then astrPieces = Split(pInput, "-") lngFirst = CLng(astrPieces(0)) lngLast = CLng(astrPieces(1)) For i = lngFirst To lngLast varReturn = varReturn & "," & CStr(i) Next If Len(varReturn) > 0 Then varReturn = Mid(varReturn, 2) End If Else varReturn = pInput End If YearList = varReturn End Function

Sin embargo, este enfoque supone que el año de inicio en cada rango será menor que el año final. En otras palabras, necesitaría invertir más esfuerzo para hacer que YearList("1915-1912") devuelva una lista de años en lugar de una cadena vacía.

Si esa función devuelve lo que desea, puede usarla en una consulta SELECT .

SELECT years_field, YearList(years_field) FROM YourTable;

O si desea reemplazar los valores almacenados en su campo de años, puede usar la función en una consulta de UPDATE .

UPDATE YourTable SET years_field = YearList(years_field);


En Excel, haga una tabla de referencia secuencial de Años, para el rango de años que espera encontrar.

A continuación, use las funciones izquierda y derecha para obtener el inicio y el final del rango.

Cree una consulta de actualización y actualice el campo de destino con una concatenación de campo de destino a sí mismo y luego también los valores de año de referencia entre los que también se ajustan entre el inicio y el final del rango.

O supongo que podrías hacer una función de usuario.


Puede usar la función Split para devolver una matriz del campo "años" que contiene el año superior e inferior. Luego haga un ciclo desde el año inferior hasta el año superior y construya la secuencia concatenada. Por ejemplo:

Public Function SplitYears(Years As String) As String Dim v As Variant Dim i As Long Dim s As String v = Split(Years, "-", 2) If UBound(v) = 1 Then For i = v(0) To v(1) s = s & "," & CStr(i) Next i s = Right(s, Len(s) - 1) Else s = v(0) End If SplitYears = s End Function