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